2

是否可以通过选项卡应用程序对用户进行身份验证?Facebook选项卡身份验证

我想创建一个ASP.NET MVC 3的Facebook标签应用程序,需要能够张贴到墙上。使用CanvasAuthorizeAttribute

[CanvasAuthorize(Permissions="publish_stream")] 

我的第一个猜测是,但它使我的标签重定向到登录Facebook的授权页面,然后返回到的画布页面,而不是停留在的粉丝专页(标签)。

然后我删除CanvasAuthorize和尝试了以下

public string Index() 
{ 
    bool isAuthorized = FacebookWebContext.Current.IsAuthorized("publish_stream"); 

    return isAuthorized.ToString(); 
} 
从我可以决定启动授权弹出,如果用户没有被授权

,但我在这里面临的一个问题。

  • 此前授权与通过其他手段,然后stream_publish权限的应用程序,运行在网页作为一个应用程序(http://apps.facebook.com/MYAPP/ MYTAB)返回运行从一个的fanpage标签的页面(http://www.facebook.com/而myfanpage?sk = app_ myappid)返回false

为什么选项卡不能读取权限,但画布页可以?

回答

3

从您的Facebook页面,您可以通过检查signed_request来检测用户是否授权您的应用程序。如果传递了user_id和oauth_token,那么用户已经授权您的应用程序。如果没有,你可以从你的控制器动作做这样的事情:在您的用户进行身份验证您的应用程序

string[] extendedPermissions = new[] { "publish_stream", "manage_pages" }; 
    var oauth = new FacebookOAuthClient(FacebookWebContext.Current.Settings); 
    var parameters = new Dictionary<string, object> { 
       { "redirect_uri", "http://www.facebook.com/pages/{SomeFacebookPage}?sk=app_{appId}"} 
      }; 

    parameters["scope"] = String.Join(",", extendedPermissions); 
    var loginUrl = oauth.GetLoginUrl(parameters); 

    return Redirect(loginUrl.AbsoluteUri); 

,用户将被发送到“REDIRECT_URI”,它可以在一个Facebook页面您的应用程序选项卡。