【问题标题】:Facebook authentication and AjaxFacebook 身份验证和 Ajax
【发布时间】:2012-01-06 00:38:45
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: facebook oauth-2.0


    【解决方案1】:

    您只需要请求offline_access 权限,那么您的access_token 将不会过期。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

        • 顺便说一句,除非他手动取消授权,否则不会提示用户再次授权您的应用。
        猜你喜欢
        • 2018-02-24
        • 2015-08-10
        • 1970-01-01
        • 2019-05-22
        • 2011-08-17
        • 1970-01-01
        • 2013-11-03
        • 1970-01-01
        • 2017-01-03
        相关资源
        最近更新 更多