У меня есть сайт, который использует 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>
Любая помощь будет принята с благодарностью!
Вы используете официальный C# SDK (который [устаревшее] (http://developers.facebook.com/blog/post/624/)) или [SDK с открытым исходным кодом C#, размещенном на codeplex] (http://facebooksdk.codeplex.com/)? –
Я использую тот, который размещен на Codeplex (через NuGet) –