Facebook身份验证和Ajax

时间:2011-03-15 14:23:43

标签: facebook oauth-2.0

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

当用户首次访问我的应用时,我正在使用该协议并存储访问令牌,以便将来向Graph API发出请求。当访问令牌过期且用户使用ajax时,会发生此问题。

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

我是否可以使用该协议获取新的访问令牌,而无需重定向用户的浏览器以获取新的访问令牌?也许是服务器端的东西?

3 个答案:

答案 0 :(得分:1)

您只需要获得offline_access权限,然后您的access_token将不会过期。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

  1. 创建名为isAccessTokenValid()
  2. 的异步方法
  3. 在任何需要FB交互的方法之前调用isAccessTokenValid()
  4. 如果access_token已过期。将当前uri与任何表单数据条目(如果有)一起保存到会话中,然后再次启动重新验证过程。
  5. 用户重新验证后,调出存储的uri。
  6. 这有点脏,但我还没有看到更清洁的解决方案。