【发布时间】:2022-01-05 11:30:12
【问题描述】:
我有一个现有的注册/登录系统:用户输入电子邮件和密码。密码经过哈希处理。我将它存储在数据库中。
当用户登录时,他们会填写完整的电子邮件和密码。密码经过哈希处理,我在数据库中查找电子邮件并检查电子邮件是否匹配。如果是,则他们已登录。
我想添加一个系统,让用户使用 GitHub 等 3rd 方 OAuth 登录。我有那个设置,但我不确定要在我的数据库中存储哪些数据。
我在想我将他们的 GitHub 电子邮件作为电子邮件,然后使用他们 GitHub 的访问令牌作为密码(所以我会对其进行哈希处理并存储它。)
我认为这可行,但我担心访问令牌可能会改变,这意味着他们将被锁定在他们的帐户之外。
如果我不应该使用访问令牌作为密码,我应该使用什么?我需要将用户的电子邮件存储在我的数据库中,但目前需要密码,如果他们使用 GitHub 登录,我无法获得。
(请注意,当用户登录时,我会调用我的后端来生成访问令牌 (JWT),我可以使用它来获取他们的用户详细信息,然后将其存储在本地存储中。我希望能够用 GitHub 或其他东西做同样的事情。)
【问题讨论】:
-
为什么一定要保存密码?如果您使用 oAuth,则不必存储密码;你得到了访问令牌,就是这样。你的应用需要访问 github 吗?或者换句话说:你也可以使用 Facebook/LinkedIn 的 oAuth 吗?
-
'我调用我的后端来生成一个访问令牌 (JWT),我可以使用它来获取他们的用户详细信息,然后将其存储在本地存储中'-您使用哪些用户详细信息?你从哪里得到它们?
-
@OhadR 现在,后端存储他们的用户名、密码、createdAt,然后他们的帐户与其他表有各种关系,例如用户有 X 个帖子。
-
@OhadR 如果我不将它们存储在数据库中,我将如何使用这些关系?他们没有用户ID,因此不能有帖子,因为每个帖子都需要一个用户ID FK。 (我想在不大量更改代码结构的情况下添加 OAuth。)
标签: database authentication oauth github-oauth