2

是否可以从标签应用程序对用户进行身份验证?

我正在尝试创建一个需要能够发布到墙上的 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 )在从粉丝页面选项卡 ( http ://www )运行页面时返回true .facebook.com/ myfanpage ?sk= app_myappid ) 返回false

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

4

1 回答 1

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 页面上的应用选项卡。

于 2011-05-06T05:37:36.300 回答