接入前准备
- 1创建应用
在控制台保存应用名称和启用渠道。
- 2保存 Client Secret
密钥只展示一次,只存放在你的服务端。
- 3登记回调地址
协议、域名、路径和查询参数必须完全一致。
在服务端兑换稳定身份
回调收到 code 和原样的 state。确认 state 后,由服务端兑换身份:
POST https://login.zanekeji.com/api/v1/token
Content-Type: application/json
{
"client_id": "zl_xxxxxxxx",
"client_secret": "zls_xxxxxxxx",
"code": "zlc_xxxxxxxx",
"redirect_uri": "https://example.com/auth/callback"
}
{
"ok": true,
"data": {
"subject_id": "sub_xxxxxxxxxxxxxxxx",
"provider": "qq",
"profile": { "nickname": "Zane", "avatar": "...", "email": "" },
"issued_at": "2026-10-19T..."
}
}
用 subject_id 登录你的本地用户。不要按昵称或邮箱自动合并不同渠道。
微信无需单独接法
把 provider 换成 wechat。平台会生成小程序二维码,并通过现有赞恩小程序确认登录。前端只轮询平台的状态接口,不接触小程序密钥。
弹出登录窗口
<script src="https://login.zanekeji.com/sdk/zanelogin.js"></script>
<script>
ZaneLogin.open({
clientId: 'zl_xxxxxxxx',
provider: 'github',
state: 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb'
}).then(({code, state}) => {
// 把 code 和 state 发给你的后端兑换
});
</script>
必须遵守的边界
✓ Client Secret 只放在服务端。
✓ 每次登录生成新的 state 并在回调时核对。
✓ 授权码五分钟有效且只能兑换一次。
✓ 回调地址使用精确匹配,不使用通配符。
✓ 失败信息返回给用户,内部错误留在平台日志。