Skip to content

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 })
}

版权所有.