2013-07-30 33 views
0

我想添加Facebook登錄到我的應用程序。在這個意義上我使用的代碼下面的代碼片段:FacebookAuthorizeFilter無盡重定向

[FacebookAuthorize] 
    public ActionResult About() 
    { 
     ViewBag.Message = "Your app description page."; 

     return View(); 
    } 

我註冊一個過濾器FacebookAuthorizeFilter

,當我瀏覽到/ home /關於我得到的是無盡的重定向到

/Home/About?code=AQAPoxl1J-....... 

我可以登錄使用Facebook如果我只是使用ASP.NET MVC4項目模板提供的OAuth。

我錯過了什麼?

回答

0

花費幾個小時後調試,反射,源代碼分析我得出的結論,即FacebookAuthorizeAttributeFacebookAuthorizeFilter只能意義地在一個Facebook畫布應用程序中使用。

+0

我遇到了同樣的問題。你記得爲什麼會出現這種情況嗎? – eniac

0

我深入研究了FacebookAuthorize過濾器代碼。 Filter不適用於非canvas應用程序的原因是,在過濾器的OnAuthorization方法中,當用戶重定向回您的應用程序時,該方法依賴Facebook POST_request中存在的signed_request。如果signed_request永遠不存在的過濾器將繼續重定向:

...代碼省略......

 if (signedRequest == null || String.IsNullOrEmpty(userId) || String.IsNullOrEmpty(accessToken)) 
     { 
      // Cannot obtain user information from signed_request, redirect to Facebook OAuth dialog. 
      string redirectUrl = GetRedirectUrl(request); 
      Uri loginUrl = client.GetLoginUrl(redirectUrl, _config.AppId, null); 
      filterContext.Result = CreateRedirectResult(loginUrl); 
     } 

...代碼省略..

另一種方法可能是創建一個類似的過濾器檢查代碼查詢字符串參數的存在。一旦獲得代碼,您可以使用您的應用程序的appId和appSecret來交換訪問令牌的代碼。一旦獲得訪問令牌,您可以確定用戶授予和處理的權限。