# 在用户登录discourse时触发在外部服务上的账户创建/登录

**URL:** https://meta.discourse.org/t/triggering-account-creation-login-on-external-service-when-a-user-logs-in-on-discourse/340359
**Category:** Development
**Created:** [2024年十二月4日 13:18 UTC](https://meta.discourse.org/t/triggering-account-creation-login-on-external-service-when-a-user-logs-in-on-discourse/340359 "2024-12-04T13:18:09Z")
**Posts on this page:** 1
**Showing post:** 5

<div class="post-metadata">

### Author: ![renato](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/renato/32/383632_2.png) [@renato](https://meta.discourse.org/u/renato)
#### Post date: [2024年十二月4日 16:27 UTC](https://meta.discourse.org/t/triggering-account-creation-login-on-external-service-when-a-user-logs-in-on-discourse/340359/5 "2024-12-04T16:27:55Z")

</div>

我的答案假设您正在使用 Discourse 作为您的身份提供商（使用其登录/注册 UI），并且希望保持这种状态。

> [@Chris\_Dawson](#):
>
> 如果 connect 只是现有 discourse 用户身份验证管理之上的一个附加层，那么这似乎是可行的。

在 Discourse 端，启用它就像启用设置 `enable discourse connect provider` 并向 `discourse connect provider secrets`（用于哈希 SSO 有效负载）添加一个秘密字符串一样简单。

> [@Discourse](#):
>
> 启用设置 `enable discourse connect provider` 并添加一个秘密字符串到 `discourse connect provider secrets`（用于哈希 SSO 有效负载）。

但是，您提到您正在构建一个插件。

> [@Chris\_Dawson](#):
>
> 我的第一个尝试是让 JS 插件调用 **服务器上的一个路径** ，并包含 discourse 身份验证 cookie。然后，对于该路径，让 nginx 将其代理到一个服务（“登录代理”），该服务可以解码身份验证 cookie 并确定用户是谁。通过验证的用户信息，登录代理可以调用 pocketbase 并获取 pocketbase 身份验证 cookie，然后返回该 pocketbase 身份验证 cookie，客户端 JS 可以使用该 cookie 直接向 pocketbase 发出后续请求。

如果您在 Discourse 插件的新控制器操作中构建“服务器上的一个路径”，您可以从会话中获取用户，调用第三方服务，并将 JWT 返回给您的客户端。

---

_[View the full topic](https://meta.discourse.org/t/triggering-account-creation-login-on-external-service-when-a-user-logs-in-on-discourse/340359)._
