如何显示用户已连接到 GitHub

How to display that a user is connected to GitHub

我正在开发一个类似 Heroku 的网站。我对 Github OAuth 部分应该做什么感到困惑?当您想 register in Heroku 并登录时,您不能使用 OAuth 方式(login/register 使用 Github)。

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

我的问题

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

正是 Heroku 所做的。

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

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

GitHub,与所有基于 OAuth 的 API 一样,要求代表用户向 API 发出的每个请求都使用 access_token 进行身份验证。如果您没有在请求的同时传递 access_token,请求将失败并显示 401 Unauthorized 状态代码。

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

考虑到这一点,让我们尝试总结一下 Heroku 为显示此“Connected”状态所必须完成的不同步骤在 GitHub 标志下。

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

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