部署于 Cloudflare Pages · 无服务器

一次配置社交登录
所有站点共用一把密钥

在环境变量里配好 GitHub、Google、Microsoft、Discord、QQ,再设一个站点密钥。你的任意多个项目只接入这一处,就能用上全部社交登录——不用再逐个平台申请、配回调。

社交平台

AuthHub
一次配置

你的站点

博客 blog.you.com
商城 shop.you.com
应用 app.you.com
共用同一个 SITE_KEY
为什么用它

省掉每个项目的重复登录接入

集中配置一次

各平台 OAuth 凭证只在环境变量里配一次,回调地址也只注册一处。

配了就自动开启

设置了哪个平台的凭证,登录页就自动出现哪个,无需任何开关。

一把密钥,多站共用

一个站点密钥可以给任意多个站点使用,新项目零额外申请即可接入。

工作原理

纯无状态,没有数据库和后台

配置全在环境变量里,三步完成一次登录

1

引导登录

下游服务端对「回调地址+时间戳」用密钥算出 sign,跳转到 /authorize 带上 redirect_urisign(不带密钥)。

2

社交授权

AuthHub 校验签名,带用户去对应平台授权,回调后把身份签成短效 code 发回。

3

换取用户

你的服务端用 site_key + code/token(密钥只在这个后端请求里),拿到 { user } 完成登录。

接入方式

两种方式,登录样式随你定

用托管登录页,或让站点完全自建登录 UI

方式一 · 托管登录页

跳到 AuthHub 的登录页,自动列出已启用平台。可用 providers 限定只显示哪些、以什么顺序。

/authorize?redirect_uri=…&ts=…&sign=…
  &providers=github,google   // 只显示这两个(可选)

方式二 · 自建登录 UI

站点自己做按钮和样式,每个按钮直接指定 provider,跳过托管页、直达该平台授权。同一个 sign 对所有平台按钮通用。

<!-- 服务端渲染,ts/sign 由后端算好 -->
<a href="/authorize?redirect_uri=…&ts=…&sign=…
    &provider=github">用 GitHub 登录</a>
<a href="…&provider=qq">用 QQ 登录</a>
快速开始

配好环境变量即可上线

在 Cloudflare Pages → 设置 → 环境变量 中添加

环境变量

设了哪个平台,哪个平台就自动出现在登录页。

SITE_KEY必填

站点密钥(API Key)。用于:①对 /authorize 请求签名,②后端调 /token,③签发/校验 token。只放服务端,绝不写进前端或 URL。多个站点共用同一个值。

GITHUB_CLIENT_IDGITHUB_CLIENT_SECRET

配了即启用 GitHub。其余同理:GOOGLE_* MICROSOFT_* DISCORD_* QQ_*

APPLE_*Apple 专用

Apple 无固定 secret,需 4 个变量:APPLE_CLIENT_ID(Services ID)、APPLE_TEAM_IDAPPLE_KEY_IDAPPLE_PRIVATE_KEY(.p8 内容);平台用 ES256 自动生成 client_secret。

ALLOWED_REDIRECT_HOSTS可选

额外的回调域名白名单(逗号分隔,支持 *.example.com)。已有签名保护,通常无需设置;需要更严可加。

ISSUER可选

强制指定对外域名(默认自动取请求域名)。

下游接入 · Node
申请教程

各平台如何申请 OAuth

申请时把对应平台的回调地址填进去即可(已按当前域名生成)