# OAuth2 + 邮箱登录，无需注册表单

**URL:** https://meta.discourse.org/t/oauth2-email-login-without-sign-up-form/169389
**Category:** Self-hosting
**Created:** [2020 年11 月 6 日 02:31 UTC](https://meta.discourse.org/t/oauth2-email-login-without-sign-up-form/169389 "2020-11-06T02:31:01Z")
**Posts on this page:** 10
**Page:** 1

<div class="post-metadata">

### 作者： ![steve.bussey](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/steve.bussey/32/199349_2.png) [@steve.bussey](https://meta.discourse.org/u/steve.bussey)
#### 发布日期： [2020 年11 月 6 日 02:31 UTC](https://meta.discourse.org/t/oauth2-email-login-without-sign-up-form/169389/1 "2020-11-06T02:31:01Z")

</div>

我正在构建一个社区门户，将使用 OAuth2 来链接提供商和 Discourse。我希望仅当邮箱被邀请加入社区时才允许通过邮箱登录（因此不应显示注册按钮），但希望允许所有 OAuth2 登录。

我似乎无法在 OAuth2/登录设置中实现这一点。这可行吗？本质上，我希望覆盖 OAuth2 的注册设置。

---

<div class="post-metadata">

### 作者： ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### 发布日期： [2020 年11 月 6 日 17:16 UTC](https://meta.discourse.org/t/oauth2-email-login-without-sign-up-form/169389/2 "2020-11-06T17:16:17Z")

</div>

> [@steve.bussey](#):
>
> 我希望仅允许被邀请加入社区的邮箱进行登录（因此不应显示注册按钮）。

我认为你只需开启“仅邀请注册”选项。你已经这样做了但效果不符合预期吗？

> [@steve.bussey](#):
>
> 我希望允许所有 OAuth2 登录方式。

那么，直接启用它们即可？

你具体做了哪些操作？哪些结果与你的预期不符？

---

<div class="post-metadata">

### 作者： ![steve.bussey](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/steve.bussey/32/199349_2.png) [@steve.bussey](https://meta.discourse.org/u/steve.bussey)
#### 发布日期： [2020 年11 月 6 日 17:43 UTC](https://meta.discourse.org/t/oauth2-email-login-without-sign-up-form/169389/3 "2020-11-06T17:43:40Z")

</div>

> [@pfaffman](#):
>
> 我想你只需要开启“仅限邀请”模式。你试过这个吗？如果试过了，它是否没有达到你的预期？

问得好。这是我尝试的第一件事。以下是发生的情况（这是在 OAuth 流程之后）：

 ![image](https://global.discourse-cdn.com/meta/original/3X/e/d/ed92a38c1cfd038342ee15bf5789d57d3a15a800.png)

下一步是取消勾选“启用新注册”：

我无法上传图片（因为我是新用户），但提示显示“目前不允许新账户注册。”

我不确定还有哪些其他选项可以解决这个问题。我尝试了各种各样的组合（这里无法一一列举），但至今尚未找到有效的解决方案。

> [@pfaffman](#):
>
> 所以，直接启用它们不就行了吗？

我觉得我的意图没有被准确理解。我的 OAuth2 登录流程运行正常，但我希望在保持其启用的同时禁用新注册。OAuth2 和邮箱注册的设置似乎绑定在一起，因此我无法在禁用邮箱注册的情况下“直接启用”OAuth2。

---

<div class="post-metadata">

### 作者： ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### 发布日期： [2020 年11 月 6 日 17:52 UTC](https://meta.discourse.org/t/oauth2-email-login-without-sign-up-form/169389/4 "2020-11-06T17:52:41Z")

</div>

> [@steve.bussey](#):
>
> 这是我尝试的第一件事。以下是发生的情况（这是在 OAuth 流程之后）：

如果未收到邀请的人尝试登录，你希望发生什么？

哦！你的意思是，如果有人尝试点击邀请链接，他们会看到这样的内容吗？

你只想允许被邀请的人加入。你希望这些人必须使用 Clove 登录。对吗？从你的示例来看，似乎正是如此。

我认为，启用“仅限邀请”模式，并禁用除 Clove 以外的所有登录方式，就能达到你想要的效果。没有 Discourse 账户的人会看到你显示的“仅限邀请”对话框。而已收到邀请的人应该能够通过 Clove OAuth 登录。

---

<div class="post-metadata">

### 作者： ![steve.bussey](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/steve.bussey/32/199349_2.png) [@steve.bussey](https://meta.discourse.org/u/steve.bussey)
#### 发布日期： [2020 年11 月 6 日 18:27 UTC](https://meta.discourse.org/t/oauth2-email-login-without-sign-up-form/169389/5 "2020-11-06T18:27:38Z")

</div>

补充说明可能有助于阐明目标：

我正在搭建一个半私密社区，其中包含三类用户：工作人员（通过邮箱登录）、应用用户（通过 OAuth2 提供的单点登录 SSO）以及特殊访客（通过邮箱登录，但不是应用用户）。我希望特殊访客需要邀请才能登录（允许他们通过邮箱登录），但希望将 OAuth2 用户视为“可信”用户，无需邀请。原因是，能够成功完成 OAuth2 操作本身就意味着该用户是可信的。

我已经正确设置了基于邮箱的邀请登录功能，但这却影响了 OAuth2 登录，因为 OAuth2 用户也被要求提供邀请。我不希望他们需要或看到邀请——他们凭借拥有 SSO 账户这一事实已具备可信度。

这样是否更好地解释了问题？

---

<div class="post-metadata">

### 作者： ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### 发布日期： [2020 年11 月 6 日 21:00 UTC](https://meta.discourse.org/t/oauth2-email-login-without-sign-up-form/169389/6 "2020-11-06T21:00:09Z")

</div>

> [@steve.bussey](#):
>
> 我希望将 OAuth2 用户视为“受信任”用户，这样他们就不需要邀请。

这正是我遗漏的部分！

我想（但不完全确定），`external auth skip create confirm` 可能就是你要找的配置。该描述仅提到了 SSO，但我_认为_它现在也适用于 OAuth。我曾帮助他人设置了一个站点，使其在 OAuth2 配置中跳过创建对话框，我认为这就是关键所在。

---

<div class="post-metadata">

### 作者： ![steve.bussey](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/steve.bussey/32/199349_2.png) [@steve.bussey](https://meta.discourse.org/u/steve.bussey)
#### 发布日期： [2020 年11 月 6 日 22:01 UTC](https://meta.discourse.org/t/oauth2-email-login-without-sign-up-form/169389/7 "2020-11-06T22:01:46Z")

</div>

我会尝试其他各种选项。结果如下：

仅邀请 + 外部跳过：

 ![image](https://global.discourse-cdn.com/meta/original/3X/a/6/a681b0728bbca3ce36ceca38da4fed3857c471c4.png)

仅邀请、外部跳过、禁用邮箱登录：

 ![image](https://global.discourse-cdn.com/meta/original/3X/8/d/8d13e457a62a8c1d50eaa56457dc25c66241ea04.png)

看起来这些选项行不通。

---

<div class="post-metadata">

### 作者： ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### 发布日期： [2020 年11 月 6 日 22:28 UTC](https://meta.discourse.org/t/oauth2-email-login-without-sign-up-form/169389/8 "2020-11-06T22:28:14Z")

</div>

啊，是的，真糟糕。我猜你接下来需要 fork oauth2 插件，并让它覆盖“仅限邀请”的设置。

---

<div class="post-metadata">

### 作者： ![steve.bussey](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/steve.bussey/32/199349_2.png) [@steve.bussey](https://meta.discourse.org/u/steve.bussey)
#### 发布日期： [2020 年11 月 8 日 03:26 UTC](https://meta.discourse.org/t/oauth2-email-login-without-sign-up-form/169389/9 "2020-11-08T03:26:45Z")

</div>

感谢 @pfaffman，这似乎就是我不得不接受的情况。对于托管版 Discourse，这应该是不可能的吧？如果不是的话，我可能需要为它想别的办法了。

---

<div class="post-metadata">

### 作者： ![system](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/system/32/443519_2.png) [@system](https://meta.discourse.org/u/system)
#### 发布日期： [2020 年12 月 8 日 03:37 UTC](https://meta.discourse.org/t/oauth2-email-login-without-sign-up-form/169389/10 "2020-12-08T03:37:38Z")

</div>

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