"使用Slack"每次都会提示用户提供权限

时间:2017-09-07 11:05:05

标签: single-sign-on slack slack-api

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

1 个答案:

答案 0 :(得分:0)

不,它与公共App目录无关。

Slack登录不像其他OAuth提供商那样缓存用户登录,因此如果您想避免用户每次必须在应用中缓存用户权限时都必须登录。例如使用cookies。

原则上它是如何运作的:

  1. 用户成功登录后,将有关该成功登录的信息存储在该客户端的cookie中。
  2. 当客户再次打开您的网页时,请检查该客户端的cookie以获取有关成功登录的信息。
  3. 当您发现信息显示属于该客户端的用户已登录(而不是显示Slack登录按钮)。
  4. 显示登录用户注销的选项(可选)
  5. 您存储的有关用户的信息取决于您的应用程序需求。如果您只想要成功登录的证明,那么存储team_iduser_id就足够了。但是,如果成功登录,您还会收到该用户的新access_token(与您应用的access_token不同)。 (有关从Slack收到的内容的完整示例,请参阅下文)

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

    以下是成功登录后从Slack收到的内容的示例:

    {
        "ok": true,
        "access_token": "XXXX",
        "scope": "identity.basic",
        "user": 
        {
            "id": "U12345678",
            "name": "Donald Dummy"
        }
        "team": 
        {
            "id": "T12345678"
        }
    }