Appearance
auth — OAuth2 认证
auth 模块提供了 OAuth2 第三方登录功能,支持多种认证提供商。
引入方式
javascript
var auth = require("auth")
// 或
var login = require("login")支持的提供商
github、google、gitee、wechat、qq、weibo、dingtalk、feishu、lark、microsoft、gitlab、discord、slack、line、apple
Builder 构建模式
javascript
var client = auth.Provider("github")
.Config({
ClientID: "your-client-id",
ClientSecret: "your-client-secret",
RedirectURL: "https://your-app.com/callback"
})
.Build()API 列表
GetAuthURL — 获取授权 URL
javascript
var url = client.GetAuthURL("random-state")
// 跳转用户到该 URL 进行授权Exchange — 用授权码换令牌
javascript
var tokenInfo = client.Exchange("authorization-code")
// 返回: {AccessToken: "xxx", RefreshToken: "xxx", ...}Callback — 回调获取用户信息
javascript
var userInfo = client.Callback("authorization-code")
// 返回: {ID: "123", Name: "张三", Email: "test@example.com", Avatar: "xxx"}RefreshToken — 刷新令牌
javascript
var newToken = client.RefreshToken("refresh-token")GetUserInfo — 获取用户信息
javascript
var userInfo = client.GetUserInfo("access-token")完整示例
javascript
var auth = require("auth")
// GitHub 登录
var client = auth.Provider("github")
.Config({
ClientID: "your-github-client-id",
ClientSecret: "your-github-client-secret",
RedirectURL: "https://your-app.com/auth/github/callback"
})
.Build()
// 步骤1:获取授权 URL,前端跳转
if (request.Method() === "GET" && request.Path() === "/auth/github") {
var url = client.GetAuthURL("state-" + uuid())
response.Redirect(url)
}
// 步骤2:回调处理
if (request.Path() === "/auth/github/callback") {
var code = request.Get("code")
var userInfo = client.Callback(code)
// 查找或创建本地用户
var user = db.SelectOne("SELECT * FROM users WHERE github_id = ?", userInfo.ID)
if (!user) {
db.Exec("INSERT INTO users (github_id, name, email, avatar) VALUES (?, ?, ?, ?)",
userInfo.ID, userInfo.Name, userInfo.Email, userInfo.Avatar)
}
// 生成 JWT Token
var j = jwt.Init("secret")
var token = j.Create({ username: userInfo.Name })
response.Json({ token: token, user: userInfo })
}