2012-01-05 172 views
2

我有一個使用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

是否使用官方的C#SDK(這是已廢棄](http://developers.facebook.com/blog/post/624/))或[codeplex上託管的開源C#SDK](http://facebooksdk.codeplex.com/)? – 2012-01-05 11:56:56

+0

我使用的是Codeplex上託管的一個(通過NuGet) – 2012-01-05 12:37:36

回答

0

我們不再支持在Facebook C#SDK中解析cookie。 Facebook不再建議開發人員或SDK嘗試直接讀取cookie。我們將在不久的將來在Facebook C#SDK文檔(http://docs.csharpsdk.org)上爲此提供更多文檔和指導。

查看關於Facebook的推薦細節在這裏不使用cookie:https://developers.facebook.com/blog/post/624/