如何完全注销用户会话并清除oauth数据

因此,我在注销逻辑方面遇到了一些挑战。

我们正在使用 Discourse oauth2 进行 auth0 配置,问题在于当我们使用 currentUser.destroySession() 触发注销时,Discourse 会话会终止,因为用户已注销,但 oauth 数据似乎仍被缓存了?

我的意思是?

背景: 当您使用 SSO 时,您会期望当用户从您的网站注销时,下次他们尝试重新登录时,他们将从您的网站重定向到 SSO 页面,在那里他们可以输入凭据,一旦身份验证成功,用户将被重定向回您的网站并拥有一个活动会话。

因此,在上述背景下,Discourse 似乎并未完全注销用户,因此每当我从 Discourse 注销时,效果都很好,但每当我尝试重新登录我的论坛网站时,Discourse 不会再次触发 SSO 页面,不知何故它仍然记住以前登录的 SSO 帐户,因此它会自动选择并登录用户,这非常奇怪。

这基本上意味着我被困在该用户身上,我无法切换到其他用户帐户,除非我可能使用隐身模式或完全不同的浏览器 :frowning:

期望: 一旦我点击注销,下次尝试重新登录时,我应该被带到我的 auth0 SSO 页面,在那里我可以进行必要的操作,然后我将被重定向回 Discourse 论坛。

似乎 currentUser.destroySession() 在清除会话和 oauth 数据方面存在问题?

我还测试了手动进行 API 调用来销毁用户会话,结果仍然相同,没有改进:

fetch(`https://MY_FORUM.discourse.group/admin/users/USER_ID/log_out`, {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Api-Key': 'API_KEY',
    'Api-Username': 'ADMIN_USERNAME',
  },
})

如果您有关于如何修复/处理使用 oauth 注销的任何想法,请分享您的见解。

1 个赞