0

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

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

        return View();
    }

我注册了一个过滤器FacebookAuthorizeFilter

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

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

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

我错过了什么?

4

2 回答 2

1

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

于 2013-08-30T20:56:17.453 回答
0

经过数小时的调试、反思和源代码分析,我得出结论,FacebookAuthorizeAttributeFacebookAuthorizeFilter只能在 Facebook Canvas 应用程序中有意义地使用。

于 2013-08-01T16:22:40.913 回答