2

我正在构建一个 Facebook 应用程序,并使用 oAuth 2.0 协议进行身份验证/授权。

当用户第一次访问我的应用程序时,我正在使用协议并存储访问令牌,以便将来向 Graph API 发出请求。当访问令牌过期并且用户正在使用 ajax 时,就会出现问题。

发送 ajax 请求时,我尝试使用访问令牌从 Graph API 检索信息,但由于它已过期,我收到一个 JSON 表示访问令牌无效。现在,我可以向客户端发送回复说访问令牌已过期,并且在客户端我可以将他重定向到https://www.facebook.com/dialog/oauth以再次进行身份验证过程。但是,由于整个过程都在 Ajax 中,重定向用户会损害应用程序的可用性。

有没有其他方法可以使用该协议来获取新的访问令牌,而无需重定向用户的浏览器来获取新的访问令牌?也许服务器端的东西?

4

3 回答 3

1

您只需要请求offline_access许可,然后您的access_token就不会过期。

于 2011-05-05T02:17:10.953 回答
1

正如 Rafael 所说,您可以向用户索取offline_access,然后令牌永远不会过期。但是,实际上,当用户更改密码或卸载/重新安装您的应用程序时,访问令牌确实会过期,因此您需要为用户构建一种重新验证自己的方式,以便您可以更新他们的令牌。我建议将他们重定向到一个登录页面,该页面应该(理想情况下)将他们直接发送回你告诉他们去的地方,而无需他们做任何事情,并使用深度链接将他们重新放回你的应用程序中他们离开的地方。

于 2011-05-05T04:29:57.710 回答
0

我也遇到这个问题。我想出的一种解决方案如下:

  1. 创建一个名为 isAccessTokenValid() 的异步方法
  2. 在需要 FB 交互的任何方法之前调用 isAccessTokenValid()
  3. 如果 access_token 已过期。将当前 uri 连同任何表单数据条目(如果有)一起保存到会话中,然后再次开始重新身份验证过程。
  4. 用户重新认证后,调出存储的 uri。

这有点脏,但我还没有看到更清洁的解决方案。

于 2012-01-05T16:38:45.727 回答