Angularjs 使用Angular应用程序和FB SDK更新服务器端使用的长寿命令牌

Angularjs 使用Angular应用程序和FB SDK更新服务器端使用的长寿命令牌,angularjs,facebook,facebook-javascript-sdk,facebook-access-token,Angularjs,Facebook,Facebook Javascript Sdk,Facebook Access Token,我的背景: 一个AngularJS应用程序,使用Javascript Facebook SDK和我的独特服务器(RESTAPI) 工作流程: 用户通过FB SDK使用方法FB.login(callback) 这将在稍后提供一个短期令牌,然后将其发送到服务器,以便将其转换为长期令牌 我对60天后刷新长寿令牌的机制很感兴趣 因此,通过阅读,我们发现: 即使是长寿命的访问令牌最终也会过期。在任何时候, 您可以通过将此人发送回 您的web应用使用的登录流-请注意,此人不会 实际上需要再次登录,他们已经授

我的背景: 一个AngularJS应用程序,使用Javascript Facebook SDK和我的独特服务器(RESTAPI)

工作流程:
用户通过FB SDK使用方法
FB.login(callback)

这将在稍后提供一个短期令牌,然后将其发送到服务器,以便将其转换为长期令牌

我对60天后刷新长寿令牌的机制很感兴趣

因此,通过阅读,我们发现:

即使是长寿命的访问令牌最终也会过期。在任何时候, 您可以通过将此人发送回 您的web应用使用的登录流-请注意,此人不会 实际上需要再次登录,他们已经授权了你的应用, 因此,他们将立即从登录流重定向回您的应用程序 使用刷新的令牌-该令牌对用户的显示方式将有所不同 基于您正在使用的登录流的类型,例如 正在使用JavaScript SDK,这将在后台进行, 如果使用服务器端流,浏览器将快速重定向 转到“登录”对话框,然后自动立即返回到 请重新启动你的应用程序

如果我理解得很好,当用户已经通过
FB.login(callback)
登录时,一个简单的重定向到Angular应用程序的登录流将允许获得一个新的短期令牌。
我设想,在这种情况下,
FB.login
会立即重新运行,没有用户交互,正如所写的那样

我想简单地测试一下,所以我所做的是:

  • 通过
    FB.login(callback)
    登录到应用程序
  • 点击一个虚拟链接进行简单重定向:
    window.location.replace('/')
我的应用程序是一个单页应用程序,每个URL都应该被视为身份验证页

但是,
FB.login
并没有像我从文档中预期的那样在后台运行

原因是什么?
它是否仅在进行重定向的域与客户端不同时才起作用?(我现在无法测试这个案例)


我误解了医生的意思吗

如果要在后台检查用户的身份验证状态,请使用
FB.getLoginStatus
。是的,我知道,谢谢。但我不想检查,我想了解机制;)那你到底想知道什么
FB.login
尝试打开一个弹出窗口,因此它实际上不可能是“在后台”。如果用户已经通过身份验证,并且没有要求新的权限,那么该弹出窗口将立即再次关闭,而不会向用户显示任何内容。但是对FB.login的自动调用可能会被浏览器的弹出窗口拦截器捕获,这就是为什么建议只在显式用户交互(如单击)时调用该方法的原因。如果您只是嵌入JS SDK,它将始终自动确保您在客户端有一个有效的短期用户访问令牌。“SDK在获取重定向时表现如何”——这根本没有意义,客户端JS SDK不会“获取”任何重定向。您需要在客户端上显示一个嵌入JSSDK的页面。这将为您提供一个新的、短期的用户访问令牌(假设用户已经在浏览器中登录到Facebook,否则他们必须先登录)。那么,你如何使用该代币取决于你自己。(因此,您可能需要将其发送到服务器,以创建新的扩展令牌。)如果要在后台检查用户的身份验证状态,请使用
FB.getLoginStatus
。是的,我知道,谢谢。但我不想检查,我想了解机制;)那你到底想知道什么
FB.login
尝试打开一个弹出窗口,因此它实际上不可能是“在后台”。如果用户已经通过身份验证,并且没有要求新的权限,那么该弹出窗口将立即再次关闭,而不会向用户显示任何内容。但是对FB.login的自动调用可能会被浏览器的弹出窗口拦截器捕获,这就是为什么建议只在显式用户交互(如单击)时调用该方法的原因。如果您只是嵌入JS SDK,它将始终自动确保您在客户端有一个有效的短期用户访问令牌。“SDK在获取重定向时表现如何”——这根本没有意义,客户端JS SDK不会“获取”任何重定向。您需要在客户端上显示一个嵌入JSSDK的页面。这将为您提供一个新的、短期的用户访问令牌(假设用户已经在浏览器中登录到Facebook,否则他们必须先登录)。那么,你如何使用该代币取决于你自己。(因此,您可能需要将其发送到服务器,以创建新的扩展令牌。)如果要在后台检查用户的身份验证状态,请使用
FB.getLoginStatus
。是的,我知道,谢谢。但我不想检查,我想了解机制;)那你到底想知道什么
FB.login
尝试打开一个弹出窗口,因此它实际上不可能是“在后台”。如果用户已经通过身份验证,并且没有要求新的权限,那么该弹出窗口将立即再次关闭,而不会向用户显示任何内容。但是对FB.login的自动调用可能会被浏览器的弹出窗口拦截器捕获,这就是为什么建议只在显式用户交互(如单击)时调用该方法的原因。如果您只是嵌入JS SDK,它将始终自动确保您在客户端有一个有效的短期用户访问令牌可用。“SDK在获取重定向时表现如何”–tha