“使用 Slack 登录”每次都不断提示用户授予权限

Kwi*_*wiZ 5 single-sign-on slack-api slack

我正在为我的网站进行 Slack 集成,包括允许用户使用“使用 Slack 登录”按钮登录。理想情况下,我希望它只要求用户授予identity.*一次权限,然后下一次当他们单击“使用 Slack 登录”时,授权屏幕应该只闪烁然后重定向到下一步(例如使用 Facebook),但它会保持显示授权屏幕,用户必须单击“继续”按钮一次又一次地授予权限。这对我们的用户来说很不方便。有没有办法让它像Facebook一样只提示一次?仅供参考,我的应用程序尚未公开分发到应用程序目录,这可能是原因吗?

Eri*_*ken 0

不,它与是否位于公共 App 目录中无关。

Slack Sign-in 不会像其他 OAuth 提供商那样缓存用户登录信息,因此,如果您想避免用户每次都必须登录,则必须在应用程序中缓存用户权限。例如通过使用cookie。

它的工作原理原理如下:

  1. 用户成功登录后,将有关成功登录的信息存储在该客户端的 cookie 中。
  2. 当客户端再次打开您的网页时,请检查该客户端的 cookie 以获取有关成功登录的信息。
  3. 当您发现信息显示属于该客户端的用户已登录时(而不是显示 Slack 登录按钮)。
  4. 显示登录用户注销的选项(可选)

您存储有关用户的哪些信息取决于您的应用程序的需求。如果您只想要有关成功登录的证据,那么存储 和 就足够team_iduser_id。但成功登录后,您还将收到access_token该用户的新信息(与您的应用程序的信息不同)。access_token(请参阅下面的完整示例,了解您从 Slack 收到的内容)

请记住,cookie 存储在客户端本地,用户可以查看。因此,根据您的安全需求,建议不要access_token直接在 cookie 中存储任何用户相关信息(尤其是 )。而是存储一个 ID,该 ID 链接到您的应用程序存储在服务器上的数据。(这个问题还有其他方法。但这是一个不同的讨论)

以下是成功登录后您从 Slack 收到的信息的示例:

{
    "ok": true,
    "access_token": "XXXX",
    "scope": "identity.basic",
    "user": 
    {
        "id": "U12345678",
        "name": "Donald Dummy"
    }
    "team": 
    {
        "id": "T12345678"
    }
}
Run Code Online (Sandbox Code Playgroud)