锋翎文档
Go SDKgRPC 服务

Auth 服务

认证服务 API

Auth 服务

Auth 服务提供用户认证相关功能,包括注册、登录、修改密码和注销令牌。

Auth 服务需要在 metadata 中提供有效的 App 凭证(app-access-idapp-secret-key)。

接口概览

方法说明返回 Token
RegisterByEmail邮箱注册
PasswordLogin密码登录
ChangePassword修改密码
RevokeToken注销令牌

RegisterByEmail

通过邮箱验证码完成用户注册,注册成功后自动生成登录 Token。

请求参数

type RegisterByEmailRequest struct {
    Email       string // 邮箱地址
    Code        string // 验证码
    Username    string // 用户名
    Password    string // 密码
    Nickname    string // 昵称(可选)
}

响应

type RegisterByEmailResponse struct {
    UserId       string // 用户 ID
    AccessToken  string // 访问令牌
    RefreshToken string // 刷新令牌
    ExpiresIn    int64  // 过期时间(秒)
}

使用示例

// 1. 先发送验证码
_, err := client.Public.SendRegisterEmailCode(ctx, &pb.SendRegisterEmailCodeRequest{
    Email: "user@example.com",
})

// 2. 用户输入验证码后注册
resp, err := client.Auth.RegisterByEmail(ctx, &pb.RegisterByEmailRequest{
    Email:    "user@example.com",
    Code:     "123456",
    Username: "newuser",
    Password: "SecurePass123!",
    Nickname: "New User",
})

fmt.Printf("注册成功!用户 ID: %s\n", resp.UserId)
fmt.Printf("Access Token: %s\n", resp.AccessToken)

PasswordLogin

实现 OAuth 2.0 Resource Owner Password Credentials Grant,允许受信任的第一方客户端直接使用用户名和密码换取 Token。

安全限制

  • 仅限第一方应用App.FirstParty = enabled
  • 支持用户名/邮箱/手机号三种登录方式(自动识别)

请求参数

type PasswordLoginRequest struct {
    Username string // 用户名/邮箱/手机号
    Password string // 密码
    Scope    string // 权限范围(如 "openid profile email")
}

响应

type PasswordLoginResponse struct {
    AccessToken  string // 访问令牌
    TokenType    string // 令牌类型(通常为 "Bearer")
    RefreshToken string // 刷新令牌
    ExpiresIn    int64  // 过期时间(秒)
    IdToken      string // ID Token(可选)
}

使用示例

resp, err := client.Auth.PasswordLogin(ctx, &pb.PasswordLoginRequest{
    Username: "user@example.com",
    Password: "SecurePass123!",
    Scope:    "openid profile email",
})

if err != nil {
    panic(err)
}

fmt.Printf("登录成功!\n")
fmt.Printf("Access Token: %s\n", resp.AccessToken)
fmt.Printf("过期时间: %d\n", resp.ExpiresIn)

密码登录会自动缓存 Token 到 Redis,可通过 OAuthLogic.GetToken() 获取。

ChangePassword

修改用户密码,支持普通模式和强制重置模式。

模式说明

模式条件旧密码
普通模式NeedResetPassword=false必填
强制重置模式NeedResetPassword=true可省略

请求参数

type ChangePasswordRequest struct {
    UserId           string // 用户 ID
    OldPassword      string // 旧密码(普通模式必填)
    NewPassword      string // 新密码
    NeedResetPassword bool  // 是否强制重置模式
}

响应

type ChangePasswordResponse struct {
    // 基础响应信息
}

使用示例

// 普通模式修改密码
_, err := client.Auth.ChangePassword(ctx, &pb.ChangePasswordRequest{
    UserId:      "user-123",
    OldPassword: "OldPass123!",
    NewPassword: "NewSecurePass456!",
})

// 强制重置模式(管理员场景)
_, err := client.Auth.ChangePassword(ctx, &pb.ChangePasswordRequest{
    UserId:            "user-123",
    NewPassword:       "NewSecurePass456!",
    NeedResetPassword: true,
})

RevokeToken

注销用户 Token,实现用户登出功能。符合 RFC 7009 OAuth 2.0 Token Revocation 规范。

使用场景

  • 用户主动登出
  • Token 泄露后的紧急注销

请求参数

type RevokeTokenRequest struct {
    TokenTypeHint string // 令牌类型提示(access_token/refresh_token,可选)
}

// 方法签名
func (s *AuthService) RevokeToken(
    ctx context.Context,
    accessToken string,  // 用户访问令牌
    req *pb.RevokeTokenRequest,
) (*pb.RevokeTokenResponse, error)

使用示例

// 注销 Access Token
_, err := client.Auth.RevokeToken(ctx, accessToken, &pb.RevokeTokenRequest{
    TokenTypeHint: "access_token",
})

// 注销 Refresh Token
_, err := client.Auth.RevokeToken(ctx, refreshToken, &pb.RevokeTokenRequest{
    TokenTypeHint: "refresh_token",
})

SDK 的 HTTP 路由层调用 RevokeToken 后会自动清理本地 Redis 缓存。

HTTP 路由

SDK 提供以下 Auth 相关 HTTP 路由:

方法路径说明
POST/api/account/register/email邮箱注册
POST/api/account/login/password密码登录
POST/api/account/password/change修改密码(需认证)
POST/api/account/token/revoke注销令牌(需认证)

On this page