Oauth 2 (Passport.js) 登录应该永远不会失败,对吧?

Oauth 2 (Passport.js) login should never fail, right?

如果我有 Google 的 Oauth 2 登录(使用 Passport。js/Express)并且用户之前从未访问过我的站点,则会发生以下情况:


选项 1:首次使用

用户 -> 点击 Google Oauth 2 登录 -> 后端发生 -> 用户已登录


选项 2:返回用户

用户 -> 单击 Google Oauth 2 登录 -> 后端发生 -> 用户已登录并且从数据库中检索了用户数据


选项 3:用户无法登录其 Google 帐户

用户->点击GoogleOauth 2登录->无法登录因为用户忘记了他的Googlepassword/email


同时,前两个选项将是相同的,除了 选项 1 我将发布到数据库和 Option 2 我将从数据库获取。 但是,第三个选项不是我的问题,当用户尝试登录 Google 时,他们已经被重定向到 accounts.google.com/signin/(...)。我想说的是,如果出现选项 3,我真的不需要为这种情况编写任何代码。

因此,无论是新用户还是老用户,如果用户通过 oauth 2 访问我的网站,要么他们会成功登录 Google 并且我将获取数据,要么他们不会'无法登录并且 none 的用户信息将发送给我,但无论哪种方式,我在技术上都不必处理该操作失败,因为它永远不会?

为了提供一些上下文,我问这个的原因是因为我正在编写反序列化代码并且我意识到 done(null,user) 就足够了,因为反序列化永远不会出错,对吧?

选项 3

你是对的,你不必在这里写任何代码,因为你已经外部化登录到授权服务器。

选项 1

用户通过 POST 注册,该 POST 在授权服务器中创建用户 - 但不是在您自己的数据中。

选项 2

登录后将访问令牌发送到您的 API 以获取用户信息是很常见的。如果需要,您可以在自己的数据库中创建用户(如果该用户尚不存在)。

错误处理

通常授权服务器在某些情况下可能 return 错误响应给您,在这种情况下它会给您一个代码和描述 - 如 step 10 of my write up.

关于用户数据的更多信息

我的 User Data 博客 post 进一步详细探讨了如何识别新用户和现有用户,以备不时之需。