2

我正在开发 Facebook 应用程序。我从我的应用用户那里获得了离线访问权限。现在我希望我可以使用用户第一次使用我的应用程序时生成的相同令牌,并且我会将此令牌存储在我的数据库中,并且每当用户再次登录我们的网站并希望通过我们的应用程序发布一些墙帖时我们将使用相同的令牌在墙上发布。

这是我的代码

protected void Page_Load(object sender, EventArgs e)
{
    var auth = new CanvasAuthorizer { Permissions = new[] { "user_about_me", "publish_stream", "video_upload", "share_item", "photo_upload", "offline_access" } };

    var fbWebContext = FacebookWebContext.Current;
    if (fbWebContext.IsAuthorized())
    {
        try
        {
            var fb = new FacebookWebClient(fbWebContext);
            var token = fb.AccessToken;  \\ Im Getting Token This Way When its Generated From User After Getting Extended Permission
            dynamic result = fb.Get("/me");
            long id = fbWebContext.UserId;
        }
        catch (Exception ex)
        {
            if ("(OAuthException) Error validating access token: The session is invalid because the user logged out or because auth.expireSession was invoked." == ex.Message)
            {
                fbWebContext.DeleteAuthCookie();
                Session.Clear();
            }
        }
    }
}

我使用了访问令牌,var token = fb.AccessToken但是当我使用它时,它说

您的令牌在 Unix 时间 xxxxxxxxxx 过期。

在请求离线访问的扩展权限后,任何人都可以告诉我这是否是访问令牌,那么为什么它说“您的访问令牌已过期?”。有人可以帮忙吗?

4

1 回答 1

0

这里的主要问题是,即使您请求了offline_access 权限,您也不能100% 确定令牌永远不会过期。

在许多情况下,访问令牌可能会过期 - 即使使用了offline_access - 场景,例如:用户更改密码、应用程序密码更改等。在这些和其他情况下,您的应用程序必须能够检测到无效的访问令牌并通过用户通过身份验证流程获得一个新的、新鲜的令牌。

您可以测试您的访问令牌,并使用访问令牌和访问令牌 lint 工具对其进行调试:https ://developers.facebook.com/tools/access_token和https://developers.facebook.com/tools/access_token /皮棉

要仔细检查您是否已成功获得有效令牌,请将您通过 API 获得的令牌复制并粘贴到图形浏览器工具中。https://developers.facebook.com/tools/explorer/?method=GET&path=me

于 2011-08-16T11:54:37.987 回答