我正在构建一个Facebook应用程序,并使用oAuth 2.0协议进行身份验证/授权。
当用户首次访问我的应用时,我正在使用该协议并存储访问令牌,以便将来向Graph API发出请求。当访问令牌过期且用户使用ajax时,会发生此问题。
当发送ajax请求时,我尝试使用访问令牌从Graph API检索信息,但是由于它已过期,我得到一个JSON,说访问令牌无效。现在,我可以向客户端发送一个回复,说访问令牌已过期,在客户端我可以将他重定向到https://www.facebook.com/dialog/oauth以再次通过身份验证过程。但是,由于整个过程都在Ajax中,重定向用户会损害应用程序的可用性。
我是否可以使用该协议获取新的访问令牌,而无需重定向用户的浏览器以获取新的访问令牌?也许是服务器端的东西?
答案 0 :(得分:1)
您只需要获得offline_access
权限,然后您的access_token
将不会过期。
答案 1 :(得分:1)
正如Rafael所说,您可以向用户询问offline_access
,然后令牌永远不会过期。但是,实际上,当用户更改密码或卸载/重新安装您的应用程序时,访问令牌会到期,因此您需要为用户构建一种重新验证自己的方法,以便您可以更新他们的令牌。我建议将它们重定向到一个登录页面,该登录页面应该(理想情况下)只是将它们发送到您告诉他们去的地方而不必他们做任何事情,并使用deep linking将它们放回您的应用程序中
答案 2 :(得分:0)
我也遇到过这个问题。我想出的一个解决方案如下:
这有点脏,但我还没有看到更清洁的解决方案。