我正在尝试将facebook登录添加到我的应用程序中。在这种程度上,我正在使用以下代码片段:
[FacebookAuthorize]
public ActionResult About()
{
ViewBag.Message = "Your app description page.";
return View();
}
我注册了一个过滤器 FacebookAuthorizeFilter 。
当我导航到/ Home /关于我得到的是无休止的重定向到
/Home/About?code=AQAPoxl1J-.......
如果我只使用ASP.NET MVC4项目模板中提供的OAuth,我可以使用facebook登录。
我错过了什么?
答案 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来交换访问令牌的代码。获得访问令牌后,您可以确定用户已授予哪些权限并进行适当处理。