如果我不知道用户是谁,如何注销?

好的——想象这样一个简单的场景:

  1. 用户 A 登录我的网站,然后点击网站上的“论坛”。他们被重定向到 Discourse,Discourse 通过 SSO 回调我的网站,他们随即完成认证并自动登录到 Discourse。很好,一切运行完美。

  2. 过了一段时间,用户 A 离开电脑,其会话自动过期。他们从未在我的应用或 Discourse 中明确点击“注销”。

  3. 用户 B 在同一台设备上登录我的网站,点击进入论坛。由于 Discourse 仍显示用户 A 已登录,因此不会发起 SSO 请求,因为 Discourse 会话仍处于登录状态。结果,用户 B 以用户 A 的身份登录到了 Discourse。:frowning:

我该如何处理这种情况?

谢谢,
Eric

您可以挂钩一个 API 调用以自动登出 Discourse:

2 个赞

好的,但如果用户已经“离开”了电脑且会话已过期,我该如何处理呢?也许这更是一个 PHP 问题(我的主站就是用 PHP 编写的)…

这个技巧应该仍然有效:

3 个赞

@riking 抱歉,我有一个好奇的问题。

像 Auth0 这样的服务是如何为 Discourse 处理自动登出的?

您能具体说明一下这是什么意思吗?您的应用的会话时长是多少?您是如何处理会话过期的?

Discourse 有一个“最大会话时长”设置,默认值为 1440 小时,即 60 天。

简而言之,如果您无法确定使用电脑的用户是否已更换,那么您很难轻易采取措施来防止这种情况。您可以缩短会话时长,或定期从您的应用调用接口以注销用户。但这样一来,如果您的用户需要长时间使用电脑,他们就会发现自己不得不重新进行身份验证流程。

Discourse 可以扩展您当前使用的登录和会话流程,但在缺乏上述更多信息的情况下,很难准确判断问题所在以及是否存在改进机会。

5 个赞

感谢您的回复!我意识到,这个问题归根结底是关于在主网站上管理用户。

如果用户手动从主网站登出,我就必须通过 API 调用 Discourse,以便在那里也将其登出。

如果用户未主动登出但会话已过期,我也必须同时调用 Discourse 将其登出。

最后:当用户通过 Discourse 的“登出”功能登出时,我需要捕获该事件(通过 Webhook),并在我的网站上将其登出。

哇,集成工作!

1 个赞