Facebook AuthorizeFilter无限重定向

时间:2013-07-30 21:28:56

标签: facebook asp.net-mvc-4

我正在尝试将facebook登录添加到我的应用程序中。在这种程度上,我正在使用以下代码片段:

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

        return View();
    }

我注册了一个过滤器 FacebookAuthorizeFilter

当我导航到/ Home /关于我得到的是无休止的重定向到

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

如果我只使用ASP.NET MVC4项目模板中提供的OAuth,我可以使用facebook登录。

我错过了什么?

2 个答案:

答案 0 :(得分:0)

经过几个小时的调试,反思,源代码分析后,我得出的结论是, FacebookAuthorizeAttribute FacebookAuthorizeFilter 只能在Facebook Canvas应用程序中有意义地使用。

答案 1 :(得分:0)

我更深入研究了FacebookAuthorize过滤器代码。 Filter不能与非画布应用程序一起使用的原因是,在过滤器的OnAuthorization方法中,当用户被重定向回您的应用程序时,该方法依赖于Facebook的signed_request存在于POST requset中。如果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来交换访问令牌的代码。获得访问令牌后,您可以确定用户已授予哪些权限并进行适当处理。