У меня есть сайт, который использует Facebook API для входа в систему. Мы используем JS SDK и C # SDK.
Наш сайт работал нормально около месяца, но вчера вечером люди начали получатьпустые страницы при входе в систему.
Это также происходило один раз во время бета-тестирования, но мы решили, что это произошло из-за некоторых изменений, которые мы внесли в процесс входа в Facebook, и он исчез после того, как мы удалили наши куки.Но теперь это произошло снова, и я не могу попросить своих пользователей удалить их куки (для некоторых это кажется полезным, просто перезапустив браузер, хотя это все еще очень раздражает)
В моем журнале ошибок я вижуошибка, которая заключается в следующем:
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>
Любая помощь будет принята с благодарностью!