У меня есть сайт, который использует Facebook API для входа. Мы используем JS SDK и C# SDK.
Наш сайт работал нормально около месяца, но прошлой ночью люди начали получать пустые страницы при входе в систему.
Это также произошло один раз во время бета-тестирования, но мы решили, что это произошло из-за некоторых изменений, которые мы внесли в процесс входа в Facebook, и они исчезли после того, как мы удалили наши файлы cookie. Но теперь это произошло снова, и я не могу попросить своих пользователей удалить их файлы cookie (для некоторых это, кажется, помогает, просто перезапустив браузер, хотя это все еще очень раздражает)
В моем журнале ошибок я вижу ошибку, которая выглядит следующим образом:
System.InvalidOperationException: Invalid signed request.
at Facebook.FacebookSignedRequest.TryParse(String secret, String signedRequestValue, Int32 maxAge, Double currentTime, Boolean throws)
at Facebook.FacebookSignedRequest.Parse(String secret, String signedRequestValue)
at Facebook.FacebookSignedRequest.GetSignedRequest(String appId, String appSecret, HttpContextBase httpContext)
at Facebook.FacebookSession.GetSession(String appId, String appSecret, HttpContextBase httpContext, FacebookSignedRequest signedRequest)
at Facebook.Web.FacebookWebContext.get_Session()
at Facebook.Web.FacebookWebContext.IsAuthenticated()
at Facebook.Web.FacebookWebContext.IsAuthorized(String[] permissions)
at Facebook.Web.Mvc.FacebookAuthorizeAttribute.OnAuthorization(AuthorizationContext filterContext, IFacebookApplication facebookApplication)
at System.Web.Mvc.ControllerActionInvoker.InvokeAuthorizationFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor)
at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName)
at System.Web.Mvc.Controller.ExecuteCore()
at System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext)
at System.Web.Mvc.MvcHandler.<>c__DisplayClass6.<>c__DisplayClassb.<BeginProcessRequest>b__5()
at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass1.<MakeVoidDelegate>b__0()
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
Странно то, что это произошло за ночь для нескольких пользователей одновременно, я входил и выходил из страницы каждый день в течение месяца, и сегодня я просто получаю пустую страницу, и эта ошибка отображается в журнале.
Очевидно, похоже, что это как-то связано с файлом cookie или потерей сеанса. Кажется, это случается с людьми, которые не выходят из Facebook, которые остаются в системе, а затем возвращаются позже и, возможно, теряют сеанс, и когда они снова входят в систему, это не работает. Я не могу подтвердить это на 100%, но также кажется, что ошибка возникает у многих людей, которые оставляют настоящий сайт открытым в своем браузере и просто позволяют своему компьютеру перейти в спящий режим, а затем на следующий день, когда они начинают навигацию по сайту снова они получают пустую страницу, поэтому они переходят на страницу входа, пытаются войти, но после входа снова получают пустую страницу.
Таким образом, вы могли бы сказать, что именно это вызывает ошибку, но почему это происходит со всеми в один и тот же день, а не с кем-то время от времени? Это не имеет смысла для меня.
JS регистрации выглядит так:
<script>
window.fbAsyncInit = function () {
FB.init({
appId: 'XXXXXXXXXXXX',
channelUrl: 'http://www.xxxxxx.com/channel.html',
status: true, // check login status
cookie: true, // enable cookies to allow the server to access the session
oauth: true, // enable OAuth 2.0
xfbml: true // parse XFBML
});
// Run js that is dependent on the Facebook session
initFacebook();
FB.Canvas.setAutoResize();
};
// Load the SDK Asynchronously
(function (d) {
var js, id = 'facebook-jssdk'; if (d.getElementById(id)) { return; }
js = d.createElement('script'); js.id = id; js.async = true;
js.src = "//connect.facebook.net/en_US/all.js";
d.getElementsByTagName('head')[0].appendChild(js);
} (document));
</script>
Любая помощь будет принята с благодарностью!