概述 | 腾讯云开发 CloudBase - AI 原生后端一体化平台
跳到主要内容

概述

Auth Api 提供了一套完整的认证相关功能,支持多种登录方式、用户管理和会话管理。Auth Api 按照功能用途分为 7 个类别。每个类别包含相关的 API 方法,方便开发者根据具体需求快速找到合适的接口。

提示

v3 版本在调用身份认证相关 API 时,使用的是 身份认证 HTTP API 的开放能力。

  • 认证登录:用户注册和登录相关的 API 方法,支持多种登录方式。
  • 会话管理:管理用户会话状态和令牌的 API 方法。
  • 用户管理:获取、更新和管理用户信息的 API 方法。
  • 身份源管理:管理第三方身份源绑定和解绑的 API 方法。
  • 密码管理:密码重置和修改相关的 API 方法。
  • 验证管理:验证码发送、验证和重发相关的 API 方法。
  • 其他工具:其他辅助功能的 API 方法。

基础使用示例

Publishable Key 可前往 云开发平台/API Key 配置 中生成

auth.detectSessionInUrl 为初始化可选参数,设置后可以自动检测 URL 中的 OAuth 参数(code、state),适用于signInWithOAuthlinkIdentity等使用场景

import cloudbase from "@cloudbase/js-sdk";

// 初始化
const app = cloudbase.init({
env: "your-env-id", // 替换为您的环境ID
region: "ap-shanghai", // 地域,默认为上海
accessKey: "", // 填入生成的 Publishable Key,
auth: {
detectSessionInUrl: true, // 可选:自动检测 URL 中的 OAuth 参数,适用于signInWithOAuth、linkIdentity
},
});

const auth = app.auth;

认证登录

signUp

async signUp(params: SignUpReq): Promise<SignUpRes>

注册新用户账户,采用智能注册并登录流程。

提示

手机 号验证码注册 仅支持 上海 地域

  • 创建一个新的用户账户
  • 采用智能注册并登录流程:发送验证码 → 等待用户输入 → 智能判断用户存在性 → 自动登录或注册并登录
  • 如果用户已存在则直接登录,如果用户不存在则注册新用户并自动登录

参数

params
SignUpReq

返回

Promise
SignUpRes

示例

// 第一步:发送邮箱验证码并存储 verificationInfo
const { data, error } = await auth.signUp({
email: "newuser@example.com",
password: "securePassword123",
username: "newuser",
});

if (error) {
console.error("发送验证码失败:", error.message);
} else {
console.log("验证码已发送到邮箱,等待用户输入...");

// 第二步:等待用户输入验证码(通过 Promise 包装用户输入事件)
const verificationCode = "123456"; // 用户输入的验证码

// 第三步:智能验证流程(自动判断用户存在性)
const { data: loginData, error: loginError } = await data.verifyOtp({
token: verificationCode,
});

if (loginError) {
console.error("验证失败:", loginError.message);
} else {
// 第四步:自动完成注册或登录
console.log("操作成功,用户信息:", loginData.user);
console.log("会话信息:", loginData.session);
console.log(
"系统已自动判断:",
loginData.user?.email ? "新用户注册并登录" : "现有用户直接登录"
);
}
}

signInAnonymously

async signInAnonymously(params?: SignInAnonymouslyReq): Promise<SignInRes>

匿名登录,创建一个临时匿名用户账户。

  • 创建一个临时匿名用户账户
  • 无需提供任何身份验证信息
  • 适合需要临时访问权限的场景
  • 使用前,请确认已在云开发平台/身份认证/注册配置中开启允许匿名登录(默认开启)

参数

params
SignInAnonymouslyReq

返回

Promise
SignInRes

示例

// 创建匿名用户
const { data, error } = await auth.signInAnonymously();

if (error) {
console.error("匿名登录失败:", error.message);
console.error("错误代码:", error.code);
} else {
console.log("匿名登录成功");
console.log("匿名用户ID:", data.user?.id);
console.log("会话信息:", data.session);
console.log("是否为匿名用户:", data.user?.is_anonymous);
}

signInWithPassword

async signInWithPassword(params: SignInWithPasswordReq): Promise<SignInRes>

使用用户名、邮箱或手机号和密码登录。

参数

params
SignInWithPasswordReq

返回

Promise
SignInRes

示例

const { data, error } = await auth.signInWithPassword({
username: "testuser",
password: "password123",
});

if (error) {
console.error("登录失败:", error.message);
} else {
console.log("登录成功,用户信息:", data.user);
console.log("会话信息:", data.session);
}

signInWithOtp

async signInWithOtp(params: SignInWithOtpReq): Promise<SignInWithOtpRes>

使用一次性密码(OTP)进行登录验证,支持邮箱和手机号验证。

提示

短信验证码 仅支持 上海 地域

  • 通过邮箱或手机号发送一次性验证码进行登录验证
  • 支持完整的验证流程:发送验证码 → 等待用户输入 → 验证并登录
  • 适用于无密码登录场景,提供更高的安全性
  • 使用前,请确认已在云开发平台/身份认证/登录方式/常规登录中开启邮箱/短信验证码登录
  • 如果用户不存在,会默认注册用户,可以通过 shouldCreateUser参数控制是否自动创建用户,默认为 true
  • 对于邮箱登录,可以通过 emailRedirectTo 参数指定回调地址,启用魔法链接(Magic Link)登录,用户点击邮件中的链接即可完成登录

参数

params
SignInWithOtpReq

返回

Promise
SignInWithOtpRes

示例

const { data, error } = await auth.signInWithOtp({
phone: "13800138000",
});

if (error) {
console.error("发送验证码失败:", error.message);
} else {
console.log("验证码已发送,等待用户输入...");

// 用户输入验证码后验证
const { data: loginData, error: loginError } = await data.verifyOtp({
token: "123456",
});

if (loginError) {
console.error("验证失败:", loginError.message);
} else {
console.log("登录成功:", loginData.user);
console.log("会话信息:", loginData.session);
}
}

signInWithOAuth

async signInWithOAuth(params: SignInWithOAuthReq): Promise<SignInOAuthRes>

生成第三方平台授权链接,支持微信、Google 等主流平台。

  • 生成第三方平台(如微信、Google 等)的授权页面 URL
  • 将状态信息保存到浏览器会话中,以便后续验证
  • 支持自定义回调地址和状态参数
  • 使用前,请确认已在云开发平台/身份认证/登录方式中开启对应的 OAuth 身份源

注意事项

  • 调用此方法后,状态信息会自动保存到浏览器会话中,在 cloudbase.init 时设置auth.detectSessionInUrltrue 时,从第三方回调回来后会自动调用 verifyOAuth 进行验证,否则后续需要手动通过 verifyOAuth 方法进行验证
  • 如果未提供 state 参数,系统会自动生成格式为prd-{provider}-{随机字符串}的状态参数
  • 回调地址需要配置在云开发平台的安全域名中,否则会返回权限错误
  • 目前,使用"微信开放平台"登录时先要确保用户已关联对应的身份源,可以通过 linkIdentity 进行身份源关联

参数

params
SignInWithOAuthReq

返回

Promise
SignInOAuthRes

示例

// 初始化
const app = cloudbase.init({
env: "your-env-id", // 替换为您的环境ID
region: "ap-shanghai", // 地域,默认为上海
accessKey: "", // 填入生成的 Publishable Key,
auth: {
detectSessionInUrl: true, // 可选:自动检测 URL 中的 OAuth 参数
},
});

const { data, error } = await auth.signInWithOAuth({
provider: "wechat",
options: {
redirectTo: "https://example.com/callback",
state: "wx_auth_123456",
},
});

if (error) {
console.error("获取微信授权链接失败:", error.message);
} else {
console.log("微信授权链接:", data.url);
console.log("第三方平台:", data.provider);
// 跳转到微信授权页面
window.location.href = data.url;
}

signInWithIdToken

async signInWithIdToken(params: SignInWithIdTokenReq): Promise<SignInRes>

使用第三方平台的身份令牌登录,支持微信、Google 等主流平台。

  • 使用第三方平台(如微信、Google 等)的身份令牌进行登录
  • 支持指定第三方平台标识,第三方平台需在云开发平台/身份认证/登录方式中先进行配置配置
  • 令牌为必填参数

参数

params
SignInWithIdTokenReq

返回

Promise
SignInRes

示例

const { data, error } = await auth.signInWithIdToken({
provider: "wechat",
token: "wx_token_1234567890",
});

if (error) {
console.error("微信登录失败:", error.message);
} else {
console.log("微信登录成功,用户信息:", data.user);
console.log("会话信息:", data.session);
}

signInWithCustomTicket

async signInWithCustomTicket(getTickFn: GetCustomSignTicketFn): Promise<SignInRes>

使用自定义登录票据进行登录,支持完全自定义的登录流程。

  • 使用自定义的登录票据进行身份验证,登录票据创建可以在服务端使用创建自定义登录票据 API
  • 支持传入获取自定义登录票据的函数
  • 适用于需要完全自定义登录流程的场景
  • 签发 Ticket 详细流程可参考自定义登录

参数

getTickFn
GetCustomSignTicketFn

获取自定义登录票据的函数,返回 Promise<string>

返回

Promise
SignInRes

示例

// 获取自定义登录票据的函数
const getTickFn = () => Promise.resolve("custom_ticket_123456");

const { data, error } = await auth.signInWithCustomTicket(getTickFn);

if (error) {
console.error("自定义登录失败:", error.message);
} else {
console.log("自定义登录成功,用户信息:", data.user);
console.log("会话信息:", data.session);
}

signInWithOpenId

async signInWithOpenId(params?: SignInWithOpenIdReq): Promise<SignInRes>

微信小程序 OpenID 静默登录。如果用户不存在,会根据云开发平台/登录方式中对应身份源的登录模式配置,判断是否自动注册。

提示

仅支持在 微信小程序 中使用

参数

params
SignInWithOpenIdReq

登录参数

返回

Promise
SignInRes

示例

const { data, error } = await auth.signInWithOpenId();

signInWithPhoneAuth

async signInWithPhoneAuth(params: SignInWithPhoneAuthReq): Promise<SignInRes>

微信小程序手机号授权登录。如果用户不存在,会根据云开发平台/登录方式中对应身份源的登录模式配置,判断是否自动注册。

提示

仅支持在 微信小程序 中使用

参数

params
SignInWithPhoneAuthReq

登录参数

返回

Promise
SignInRes

示例

const { data, error } = await auth.signInWithPhoneAuth({ phoneCode: "xxx" });

会话管理

getSession

async getSession(): Promise<SignInRes>

获取当前会话信息,检查用户登录状态。

  • 获取当前用户的会话信息,包括访问令牌、用户信息等
  • 检查用户是否已登录,未登录时返回空会话

参数

无参数

返回

Promise
SignInRes

示例

const { data, error } = await auth.getSession();

if (error) {
console.error("获取会话失败:", error.message);
} else if (data.session) {
console.log("用户已登录:", data.session.user);
console.log("访问令牌:", data.session.access_token);
console.log("过期时间:", data.session.expires_in, "秒");
} else {
console.log("用户未登录,请先登录");
// 显示登录按钮
document.getElementById("loginBtn").style.display = "block";
}

refreshSession

async refreshSession(refresh_token?: string): Promise<SignInRes>

刷新会话令牌,延长用户登录状态,支持自动续期和错误恢复。

  • 使用刷新令牌获取新的访问令牌
  • 延长用户会话的有效期
  • 支持使用指定的刷新令牌或默认令牌

参数

refresh_token
string

返回

Promise
SignInRes

示例

const { data, error } = await auth.refreshSession();

if (error) {
console.error("刷新会话失败:", error.message);
// 刷新失败,可能需要重新登录
window.location.href = "/login";
} else {
console.log("会话刷新成功,新令牌:", data.session?.access_token);
console.log("新过期时间:", data.session?.expires_in, "秒");
}

setSession

async setSession(params: SetSessionReq): Promise<SignInRes>

使用现有的访问令牌和刷新令牌来设置用户会话,支持外部系统集成和手动会话管理。

  • 使用现有的 access_token 和 refresh_token 来设置用户会话
  • 适用于从外部系统获取令牌后手动设置会话的场景
  • 成功设置会话后会触发 SIGNED_IN 事件

参数

params
SetSessionReq

返回

Promise
SignInRes

示例

const { data, error } = await auth.setSession({
access_token: "your_access_token_here",
refresh_token: "your_refresh_token_here",
});

if (error) {
console.error("会话设置失败:", error.message);
} else {
console.log("会话设置成功");
console.log("用户信息:", data.user);
console.log("会话信息:", data.session);
}

signOut

async signOut(params?: SignOutReq): Promise<SignOutRes>

用户登出,清除当前会话和本地存储。

  • 安全退出当前用户登录状态
  • 清除服务器端会话和本地存储
  • 支持重定向到指定页面
  • 触发认证状态变化事件

参数

params
SignOutReq

返回

Promise
SignOutRes

示例

const { data, error } = await auth.signOut();

if (error) {
console.error("登出失败:", error.message);
} else {
console.log("登出成功");
// 登出后跳转到登录页
window.location.href = "/login";
}

用户管理

getUser

async getUser(): Promise<GetUserRes>

获取当前登录用户的详细信息,包括身份信息、元数据和权限状态,支持用户资料展示和权限验证。

  • 获取当前登录用户的完整信息
  • 包括用户基本信息、元数据、身份信息等 需要用户已登录状态才能获取完整信息
  • 支持检查用户权限和验证状态

参数

无参数

返回

Promise
GetUserRes

示例

const { data, error } = await auth.getUser();

if (error) {
console.error("获取用户信息失败:", error.message);
} else if (data.user) {
const user = data.user;
console.log("用户ID:", user.id);
console.log("邮箱:", user.email);
console.log("手机号:", user.phone);
console.log("用户名:", user.user_metadata?.username);
console.log("昵称:", user.user_metadata?.nickName);
console.log("头像:", user.user_metadata?.avatarUrl);
console.log("注册时间:", user.created_at);
} else {
console.log("用户未登录");
}

refreshUser

async refreshUser(): Promise<CommonRes>

刷新当前登录用户的信息。

  • 刷新当前登录用户的完整信息
  • 从服务器重新获取最新的用户数据
  • 适用于用户信息可能已更新但本地缓存未同步的场景 需要用户已登录状态才能刷新信息

参数

无参数

返回

Promise
CommonRes

示例

const { data, error } = await auth.refreshUser();

if (error) {
console.error("刷新用户信息失败:", error.message);
} else {
console.log("用户信息已刷新");
console.log("最新用户信息:", data.user);
console.log("最新会话信息:", data.session);
}

updateUser

async updateUser(params: UpdateUserReq): Promise<GetUserRes>

更新当前登录用户的信息。

  • 不支持更新密码,更新密码请使用 resetPasswordForEmailresetPasswordForOldreauthenticate
  • 更新当前登录用户的基本信息和元数据
  • 支持更新邮箱、手机号、用户名、昵称、头像等
  • 需要用户已登录状态才能更新信息 更新成功后返回更新后的用户信息

参数

params
UpdateUserReq

返回

Promise
GetUserRes

示例

const { data, error } = await auth.updateUser({
nickname: "新昵称",
gender: "MALE",
});

if (error) {
console.error("更新用户信息失败:", error.message);
} else {
console.log("用户信息已更新:", data.user);
console.log("新邮箱:", data.user?.email);
console.log("新昵称:", data.user?.user_metadata?.nickName);
}

deleteUser

async deleteUser(params: DeleteMeReq): Promise<CommonRes>

删除当前登录用户的账户。

  • 永久删除当前登录用户的账户
  • 需要验证用户密码进行身份确认
  • 删除后所有用户数据将被永久移除
  • 操作不可逆,请谨慎使用

参数

params
DeleteMeReq

返回

Promise
CommonRes

示例

const { data, error } = await auth.deleteUser({
password: "userPassword123",
});

if (error) {
console.error("账户删除失败:", error.message);
} else {
console.log("账户删除成功");
// 用户已登出,重定向到首页
window.location.href = "/";
}

身份源管理