连接SSO:登录错误 sso_login

我为我的问题做了一些研究,我认为我快成功了,但可能需要一些指导。

我基本上想将 Discourse 作为无头实现集成到我的 React 项目中,该项目已经包含用户在其自己的数据库中进行身份验证。

为此,当用户在 React 页面上登录时,它将为用户执行 SSO 以与 Discourse API 进行身份验证,以便我们可以调用适当的函数等。

所以,我首先从我的 Discourse URL 获取数据,并像这样阻止任何重定向:

const response = await fetch('https://forum.mysite.com/session/sso', {
    method: 'GET',
    redirect: 'manual', // Prevent automatic following of redirects
  });

然后我进行所有验证,并使用以下方法将用户信息的 Payload 发送到后端:

const loginResponse = await fetch(newurl.toString(), {
    method: 'GET',
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded',
    },
    redirect: 'manual',
  });

格式和签名等看起来都不错。但它给了我一个错误。所以我注释掉了它,并复制了生成的 URL 到我的浏览器中查看,它给了我这个:

Verbose SSO log: Nonce is incorrect, was generated in a different browser session, or has expired add_groups: admin: avatar_force_update: avatar_url: bio: card_background_url: confirmed_2fa: e

所以经过一些研究,我认为这些答案很接近帮助我,但我仍然不清楚该如何更改我的设置,而且 force_https 似乎不再是我们能操作的设置了(甚至不确定它有什么作用):

我觉得这可能是由不同的浏览器会话引起的,但不知道。我认为我快成功了,我只需要一点帮助。任何信息都会有帮助。谢谢!

这听起来像是问题所在。您可以通过禁用 discourse_connect_csrf_protection 站点设置来解决此问题。这是一个隐藏的站点设置,默认设置为 true。您需要从 Rails 控制台启用它。

它在这里的代码中使用:

如果它默认设置为 true,我相信你的意思是让我将其设置为 false。我现在就试试。

1 个赞

这似乎解决了问题。感谢您提供的信息!我可能永远也弄不明白,哈哈。

1 个赞

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.