我的 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
(David Taylor)
2
重定向是正常的,但应该还会弹出一个注册窗口。你看到了吗?
用户账号只有在用户确认账号详情并点击“创建”后才会被创建。
你好,David,
很遗憾,如果不输入他们的全部信息,系统无法显示任何可确认的内容。
另外,是否可以实现自动确认用户?他们的邮箱在我们这边已经验证过了,我希望尽可能为我们的用户保持无缝的体验。
david
(David Taylor)
4
目前还无法跳过该弹窗,但它应会自动从您的身份提供商填充数据。
您的 oauth2 设置中的各项值是什么?以 oauth2_json_email_path 为例。
此外,您能分享日志中完整的 “user_json” 行吗?这样我们就能看到所有的键。(您可以对电子邮件地址进行脱敏处理)
完整数据为
{"id"=>"d78dd9b5-7276-499a-b7b6-02da38e03ce9", "username"=>"patrick2"}
适用字段的字段值为“id”和“username”。
我目前正在更新端点以添加电子邮件和姓名,但我原以为只需要 id 和 username。
谢谢
Patrick
david
(David Taylor)
6
将账户连接到 Discourse 账户所需的最少数据仅为 id。然而,Discourse 需要用户名和电子邮件。这就是为什么我们会弹出注册模态框。
如果您能将此信息添加到 OAuth API 中,那将使用户体验更加顺畅:+1:
是的,我正在处理那个问题!我会更新该端点以包含电子邮件,看看是否能解决此问题。
不过,在这种情况下,用户名至少应该显示在注册页面上吧?
谢谢,
Patrick
david
(David Taylor)
8
是的,应该会。你是否已将 oauth2_json_username_path 配置为 username?
@david,太棒了,伙计!数据那边已经全部搞定。
请求自动确认 OAuth 用户标志的正确方式是什么?
谢谢
Patrick
david
(David Taylor)
11
你说的“自动确认”是指什么?跳过邮箱确认,还是跳过注册弹窗?
前者目前已经可以实现。后者我们也已关注,并计划尽快实施。
太好了!我指的是第二个!不过既然它已经在你的关注列表里了,那就一切顺利!
david
(David Taylor)
14
没错!它支持 Discourse 的所有身份验证提供商(甚至包括 Facebook、GitHub、Google 等):D