基于 Netlify 云函数的 GitHub OAuth 认证代理。
github-oauth-netlify/
├── netlify.toml # Netlify 配置
├── package.json
└── netlify/
└── functions/
└── auth.js # OAuth 云函数 (POST /api/auth)
sequenceDiagram
participant C as 前端
participant N as Netlify Function<br/>/api/auth
participant G as GitHub
C->>N: POST /api/auth<br/>{ client_id, client_secret, code }
N->>G: POST /login/oauth/access_token<br/>(x-www-form-urlencoded)
G-->>N: { access_token, token_type, scope }
N-->>C: { access_token, token_type, scope }
云函数只做一件事:接收前端发来的 OAuth 参数,转发给 GitHub 的 token 端点,把结果原样返回。
前往 GitHub Developer Settings → New OAuth App:
| 字段 | 值 |
|---|---|
| Application name | 任意 |
| Homepage URL | 你的站点地址(自定义域名或 *.netlify.app) |
| Authorization callback URL | 前端处理回调的地址 |
将项目推送到 GitHub,在 Netlify 中关联该仓库即可自动部署。
在 Netlify 控制台 → Site settings → Environment variables 中无需设置环境变量,因为 client_id、client_secret、code 均由前端在请求体中传入。
// 前端获取到 GitHub 回调的 code 后:
const res = await fetch("https://你的域名.netlify.app/api/auth", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
client_id: "你的 Client ID",
client_secret: "你的 Client Secret",
code: "GitHub 回调的 code",
}),
});
const data = await res.json();
console.log(data.access_token);# 全局安装 Netlify CLI
npm install -g netlify-cli
# 启动本地开发服务器
npm run devnpm run dev 等同于执行 netlify dev,云函数将在 http://localhost:8888/api/auth 可用。