0

我正在开发一个像 Heroku 这样的网站。我很困惑我应该如何处理 Github OAuth 部分?当您想在 Heroku 中注册并登录时,您不能使用 OAuth 方式(使用 Github 登录/注册)。

在此处输入图像描述

但登录后您可以创建应用程序。现在,您在 Heroku 中上传代码的选项之一是将您的 Heroku 帐户连接到您的 Github 帐户。

我的问题

当用户登录时,我如何将用户重定向到另一个页面,并且在身份验证(Github OAuth)之后,我如何检测到该用户以前登录并且用户不需要重新登录?

正是 Heroku 所做的。

我不明白如何将另一个数据发送到 Github OAuth 登录页面并在回调 url 中检索它以检测现在哪个用户登录并将他/她的 access_token 和 refresh_token 保存在数据库中。

并不是说我使用 expressjs express-session sequelize 和 ejs。

4

1 回答 1

2

与所有基于 OAuth 的 API 一样,GitHub 要求代表用户对 API 发出的每个请求都需要使用access_token. 如果您没有access_token在请求旁边传递,则请求将失败并显示401 Unauthorized状态代码。

如果随机用户接受了您的应用程序,则无法询问 GitHub。它不是在 OAuth 框架中实现的——因为它可能导致安全漏洞。因此,作为应用程序的所有者,您有责任记录哪个用户授权了您的应用程序。

考虑到这一点,让我们尝试总结一下 Heroku 必须实现的不同步骤,以在 GitHub 徽标下显示此“已连接”状态。

  1. 当您在 Heroku 上注册时,GitHub 集成的状态为“not_connected”。如果您访问设置页面,您会看到“连接到 GitHub”按钮。
  2. 在某个时刻,在 Heroku 仪表板中,您单击了“连接到 GitHub”按钮并已授权 Heroku 的 GitHub 应用程序。这是您被重定向到callback_url
  3. 在这个特定时间,当您在callback_url页面上时,Heroku 已在其数据库中记录了您帐户的 GitHub 集成的新状态。它被设置为“已连接”。Heroku 可能与access_tokenand一起保存refresh_token
  4. 每次您访问应用程序的设置页面时,Heroku 都会呈现您已连接,因为它在其数据库中具有状态。
  5. (可选)当 Heroku 使用你的 GitHub API 执行请求时,access_token它可以确认连接仍然有效。如果请求失败401 Unauthorized,Heroku 可以更新其数据库并将您的 GitHub 集成状态重置为“not_connected”。

对于 GitHub API 以及任何其他基于 OAuth 的 API,这项工作都是如此。如果您计划与多个 API 集成,我强烈建议您使用 API 集成管理器,例如Pizzly。它将帮助您专注于业务逻辑(“我的用户是否已连接? ”)并为您完全处理 OAuth 流程。

于 2020-07-21T08:28:58.137 回答