我有一个使用Facebook API登录的网站。我们使用的是JS SDK和C#SDK。
我们的网站已经运行了大约一个月,但是昨晚人们在登录时开始收到空白页。
这也发生在beta测试期间,但我们认为这是因为我们在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>
非常感谢任何帮助!
答案 0 :(得分:0)
问题似乎与Facebook的冗余cookie有关。我发布了question here on stackoverflow和issue report on Facebook C# SDK's codeplex website,其中我解释了问题的原因,并在SDK的代码中显示了引发异常的确切位置。希望得到一些关注,因为问题非常严重,可能是由于FB的OAuth 2.0实现。
答案 1 :(得分:0)
我们停止支持在Facebook C#SDK中解析cookie。 Facebook不再建议开发人员或SDK尝试直接读取cookie。我们将在不久的将来在Facebook C#SDK文档(http://docs.csharpsdk.org)上提供更多文档和指导。
在此处查看Facebook有关不使用Cookie的建议的详细信息:https://developers.facebook.com/blog/post/624/