本篇介绍如何获取一个真实的 GitHub 授权 code,并把它发送给添加 OAuth 中的 oauth 端点。
当你已经完成添加 OAuth,但还没有前端登录页面时,可以用这个方法。
- 已完成添加 OAuth的项目
- 已在
.env中配置好 GitHub OAuth client 凭证 - 一个用于发送测试请求的 HTTP 客户端
创建一个 GitHub OAuth App
Section titled “创建一个 GitHub OAuth App”对于简单的“用 GitHub 登录”流程,创建一个 GitHub OAuth App 就够了。只有当应用需要 GitHub App 特有的权限或仓库集成时,才需要 GitHub App。
参考 GitHub 的创建 OAuth App指南。
对于没有前端的本地测试,可以使用:
Homepage URL: http://localhost:3000Authorization callback URL: http://localhost:3000/callback本篇不需要这个回调页面真实存在。如果浏览器跳转到 /callback 后显示 404,那是正常的,直接从地址栏复制 code 查询参数即可。
获取一个 GitHub 授权码
Section titled “获取一个 GitHub 授权码”用你的 GitHub OAuth App client ID 构造一个授权 URL:
https://github.com/login/oauth/authorize?client_id=<github-client-id>&scope=read:user%20user:email把 <github-client-id> 替换成你用于 GITHUB_CLIENT_ID 的同一个值。
在浏览器中打开这个 URL,并授权该应用。
GitHub 会跳转到你的回调 URL:
http://localhost:3000/callback?code=<github-code>从地址栏复制 code 的值。
调用 brkpt-auth 端点
Section titled “调用 brkpt-auth 端点”把复制的 code 发送到你本地的 NestJS 服务:
POST /auth/oauth/githubContent-Type: application/json
{ "code": "<github-code>"}GitHub 驱动会用这个 code 换取 GitHub access token,获取 GitHub 用户资料,再把校验通过的提供商数据返回给 brkpt-auth。
如果邮箱已存在,请求会登录该用户;如果不存在,会先创建一个新用户。两种情况返回的令牌结果和其他登录方式一样。
请求被判定为无效或已过期。
重新打开授权 URL 获取一个新的 code。GitHub 授权码是短期有效且一次性的。
GitHub 返回的用户资料不包含邮箱地址。
如果用户设置了邮箱为私密,GitHub 可能会返回 email: null。添加 OAuth 中的示例适配器会拒绝这类资料,因为用户模型要求必须有邮箱。本地测试时,可以使用一个公开邮箱的账号,或者在你自己的 GitHub 流程中获取用户的主要已验证邮箱。
驱动期望的字段名不一样。
检查你所选驱动的 verify 方法。请求体的字段名必须和该方法读取的字段一致。