【发布时间】:2012-01-05 11:42:04
【问题描述】:
我有一个使用 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>
任何帮助将不胜感激!
【问题讨论】:
-
您使用的是官方 C# SDK(即deprecated)还是opensource C# SDK hosted on codeplex?
-
我正在使用托管在 Codeplex 上的那个(通过 NuGet)
标签: facebook session cookies facebook-c#-sdk facebook-login