OAuth 在成功用户 JSON 调用后重定向到 /login

我的 OAuth 基本配置表现非常奇怪。最初在设置过程中出现了一些错误,但已经解决。不过,现在我看到流程从 Discourse 流向 Cognito 授权端点,再回到 Discourse 回调,最后到达 Discourse /login。日志中没有警告或错误,检查日志时,我发现成功调用了 JSON 接口以获取用户数据。

既然似乎已成功获取令牌并加载了 JSON 数据,我原本期望用户账户能成功注册,但实际情况是用户被重定向到了登录页面。

请查看以下日志:

OAuth2 调试:after_authenticate 响应:creds: {"token"=>"eyJraWQiOiJ3YW8zbVBRWmh2Z2F6YldNaU5jS3ZOdVdRMXRmcm1ya2ZVZ2RvVjVYSG1RPSIsImFsZyI6IlJTMjU2In0.eyJzdWIiOiJkNzhkZDliNS03Mjc2LTQ5OWEtYjdiN
下午 7:48
OAuth2 调试:user_json_url: GET https://api.lifebac.com/token/details?token=eyJraWQiOiJ3YW8zbVBRWmh2Z2F6YldNaU5jS3ZOdVdRMXRmcm1ya2ZVZ2RvVjVYSG1RPSIsImFsZyI6IlJTMjU2In0.eyJzdWIiOiJkNzhkZDliNS03Mjc
下午 7:48
OAuth2 调试:user_json_response: #<Excon::Response:0x00007f36a7608a30 @data={:body=>"{\"id\":\"d78dd9b5-7276-499a-b7b6-02da38e03ce9\", ...}", :cookies=>[], :host=>"api.lifebac.com", :headers=>{"Conten
下午 7:48
OAuth2 调试:user_json: {"id"=>"d78dd9b5-7276-499a-b7b6-02da38e03ce9", ...}

任何关于当前情况的帮助都将非常宝贵。如果需要,我很乐意提供完整的堆栈跟踪信息。

重定向是正常的,但应该还会弹出一个注册窗口。你看到了吗?

用户账号只有在用户确认账号详情并点击“创建”后才会被创建。

你好,David,

很遗憾,如果不输入他们的全部信息,系统无法显示任何可确认的内容。

另外,是否可以实现自动确认用户?他们的邮箱在我们这边已经验证过了,我希望尽可能为我们的用户保持无缝的体验。

目前还无法跳过该弹窗,但它应会自动从您的身份提供商填充数据。

您的 oauth2 设置中的各项值是什么?以 oauth2_json_email_path 为例。

此外,您能分享日志中完整的 “user_json” 行吗?这样我们就能看到所有的键。(您可以对电子邮件地址进行脱敏处理)

完整数据为

{"id"=>"d78dd9b5-7276-499a-b7b6-02da38e03ce9", "username"=>"patrick2"}

适用字段的字段值为“id”和“username”。

我目前正在更新端点以添加电子邮件和姓名,但我原以为只需要 id 和 username。

谢谢

Patrick

将账户连接到 Discourse 账户所需的最少数据仅为 id。然而,Discourse 需要用户名和电子邮件。这就是为什么我们会弹出注册模态框。

如果您能将此信息添加到 OAuth API 中,那将使用户体验更加顺畅:+1:

是的,我正在处理那个问题!我会更新该端点以包含电子邮件,看看是否能解决此问题。

不过,在这种情况下,用户名至少应该显示在注册页面上吧?

谢谢,
Patrick

是的,应该会。你是否已将 oauth2_json_username_path 配置为 username

@david,太棒了,伙计!数据那边已经全部搞定。

请求自动确认 OAuth 用户标志的正确方式是什么?

谢谢

Patrick

你说的“自动确认”是指什么?跳过邮箱确认,还是跳过注册弹窗?

前者目前已经可以实现。后者我们也已关注,并计划尽快实施。

太好了!我指的是第二个!不过既然它已经在你的关注列表里了,那就一切顺利!

Automatically provision accounts with external SSO provider? (skip Create New Account prompt) - #6 by david 中提到的新设置 external_auth_skip_create_confirm 是否支持 Oauth2?

没错!它支持 Discourse 的所有身份验证提供商(甚至包括 Facebook、GitHub、Google 等):D