我正在开发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已过期。
在请求离线访问的扩展权限后,有人可以告诉我任何人这是访问令牌吗?为什么它说“您的访问令牌已过期?”。有人可以帮忙吗?
答案 0 :(得分:0)
这里的主要问题是,即使您请求了offline_access权限,也无法100%确定令牌永远不会出现。
在许多情况下,访问令牌可能会过期 - 即使使用offline_access - 方案例如:用户更改密码,应用机密更改等。在这些和其他情况下,您的应用必须能够检测到无效的访问权限令牌并传递用户通过身份验证流程以获取新的新令牌。
您可以使用访问令牌和访问令牌lint工具测试您的访问令牌并对其进行调试:https://developers.facebook.com/tools/access_token和https://developers.facebook.com/tools/access_token/lint
要仔细检查您是否已成功获得有效令牌,请将通过API获得的令牌复制并粘贴到图表资源管理器工具中。 https://developers.facebook.com/tools/explorer/?method=GET&path=me