Skip to main content

概述

Auth Api 提供了一套完整的认证相关功能,支持多种登录方式、用户管理和会话管理。Auth Api 按照功能用途分为 7 个类别。每个类别包含相关的 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)进行登录验证,支持邮箱和手机号验证。

提示

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

  • 通过邮箱或手机号发送一次性验证码进行登录验证
  • 支持完整的验证流程:发送验证码 → 等待用户输入 → 验证并登录
  • 适用于无密码登录场景,提供更高的安全性
  • 使用前,请确认已在云开发平台/身份认证/登录方式/常规登录中开启邮箱/短信验证码登录

参数

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}-{随机字符串}的状态参数
  • 回调地址需要配置在云开发平台的安全域名中,否则会返回权限错误

参数

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>

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

  • 使用自定义的登录票据进行身份验证
  • 支持传入获取自定义登录票据的函数
  • 适用于需要完全自定义登录流程的场景
  • 签发 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 = "/";
}

身份源管理

getUserIdentities

async getUserIdentities(): Promise<GetUserIdentitiesRes>

获取当前用户绑定的所有身份源信息。

  • 获取所有第三方身份源,相关身份源可在云开发平台/身份认证/登录方式中进行配置配置
  • 返回身份源的详细信息,包括平台标识、身份源 ID、绑定时间等
  • 需要用户已登录状态才能获取身份源信息

参数

无参数

返回

Promise
GetUserIdentitiesRes

示例

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

if (error) {
console.error("获取身份源失败:", error.message);
} else if (data.identities) {
console.log("用户绑定的身份源:", data.identities);

data.identities.forEach((identity) => {
console.log(
`- ${identity.name} (${identity.provider}): ${identity.provider_user_id}`
);
console.log(
` 绑定时间: ${new Date(identity.created_at).toLocaleString()}`
);
});
} else {
console.log("用户未绑定任何身份源");
}

linkIdentity

async linkIdentity(params: LinkIdentityReq): Promise<LinkIdentityRes>

绑定新的身份源到当前用户,会自动跳转第三方 OAuth 授权页面。

  • 将新的第三方身份源绑定到当前登录用户,支持绑定微信、Google、GitHub 等第三方平台,身份源需先在云开发平台/身份认证/登录方式中进行配置配置
  • 绑定成功后,用户可以使用该身份源进行登录
  • 需要用户已登录状态才能绑定身份源
  • 在 cloudbase.init 时设置auth.detectSessionInUrltrue 时,从第三方回调回来后会自动调用 verifyOAuth 进行验证,否则后续需要手动通过 verifyOAuth 方法进行验证

参数

params
LinkIdentityReq

返回

Promise
LinkIdentityRes

示例

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

// 监听身份源绑定事件
auth.onAuthStateChange((event, session, info) => {
console.log("认证状态变化:", { event, session, info });

switch (event) {
case "BIND_IDENTITY":
if (!!info.error) {
console.error("身份源绑定失败:", info.error);
// 可以在这里添加UI错误提示
} else {
console.log("身份源已绑定");
// 重新加载身份源列表
await auth.getUserIdentities();
}
break;

default:
return;
}
});

try {
const { data, error } = await auth.linkIdentity({
provider: "google",
});

if (error) {
console.error("绑定身份源失败:", error.message);
// 处理绑定失败逻辑
return;
}

console.log("身份源绑定请求已发送,等待用户授权...");
// 绑定请求成功,等待用户完成OAuth授权流程
} catch (error) {
console.error("调用linkIdentity方法时发生错误:", error);
// 处理网络错误或其他异常
}

unlinkIdentity

async unlinkIdentity(params: UnlinkIdentityReq): Promise<CommonRes>

解绑当前用户绑定的身份源。

  • 解绑当前登录用户绑定的第三方身份源,相关身份源可在云开发平台/身份认证/登录方式中进行配置配置
  • 解绑成功后需要重新加载身份源列表
  • 使用身份源标识(provider)而非身份源 ID(identity_id)进行解绑

参数

params
UnlinkIdentityReq

返回

Promise
CommonRes

示例

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

if (error) {
console.error("解绑身份源失败:", error.message);
} else {
console.log("身份源解绑成功");

// 重新加载身份源列表
await auth.getUserIdentities();
}

密码管理

resetPasswordForEmail

async resetPasswordForEmail(email: string): Promise<ResetPasswordForEmailRes>

通过邮箱重置用户密码,采用四步验证流程。

  • 通过邮箱发送验证码来重置用户密码
  • 采用四步验证流程:发送验证码 → 等待用户输入 → 验证验证码 → 设置新密码
  • 需要用户邮箱已注册且已验证

参数

email
string

用户注册的邮箱地址

返回

Promise
ResetPasswordForEmailRes

示例

// 第一步:发送验证码到邮箱
const { data, error } = await auth.resetPasswordForEmail("user@example.com");

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

// 第二步:等待用户输入验证码和新密码
const verificationCode = "123456"; // 用户输入的验证码
const newPassword = "newSecurePassword123"; // 用户输入的新密码

// 第三步:验证验证码并设置新密码
const { data: loginData, error: loginError } = await data.updateUser({
nonce: verificationCode,
password: newPassword,
});

if (loginError) {
console.error("重置密码失败:", loginError.message);
} else {
console.log("密码重置成功,用户已自动登录");
console.log("用户信息:", loginData.user);
}
}

resetPasswordForOld

async resetPasswordForOld(params: ResetPasswordForOldReq): Promise<SignInRes>

通过旧密码重置当前登录用户的密码。

  • 通过验证旧密码来重置当前登录用户的密码
  • 需要用户已登录状态
  • 适用于用户记得旧密码的场景

参数

params
ResetPasswordForOldReq

返回

Promise
SignInRes

示例

const { data, error } = await auth.resetPasswordForOld({
new_password: "newSecurePassword123",
old_password: "oldPassword123",
});

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

reauthenticate

async reauthenticate(): Promise<ReauthenticateRes>

重新认证当前登录用户身份,通过验证码验证并允许修改密码。

提示

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

  • 重新认证当前已登录用户的身份,支持更新密码
  • 通过发送验证码到用户注册的邮箱或手机号进行验证,优先选用邮箱,如果用户未设置邮箱则使用手机号
  • 适用于安全敏感操作前的身份验证

参数

无参数

返回

Promise
ReauthenticateRes

示例

// 第一步:发送验证码(使用当前用户信息)
const { data, error } = await auth.reauthenticate();

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

// 第二步:等待用户输入验证码和新密码
const verificationCode = "123456"; // 用户输入的验证码
const newPassword = "newSecurePassword123"; // 用户输入的新密码

// 第三步:验证验证码并设置新密码
const { data: loginData, error: loginError } = await data.updateUser({
nonce: verificationCode,
password: newPassword,
});

if (loginError) {
console.error("重新认证失败:", loginError.message);
} else {
console.log("重新认证成功,密码已更新");
console.log("用户信息:", loginData.user);
}
}

验证管理

verifyOAuth

async verifyOAuth(params?: VerifyOAuthReq): Promise<SignInRes>

验证第三方平台授权回调,完成 OAuth 登录流程。

  • 验证第三方平台授权回调,获取用户信息并完成登录,可以配合signInWithOAuth使用
  • 支持自动从 URL 参数获取授权码和状态参数
  • 提供完整的安全验证机制,防止 CSRF 攻击

参数

params
VerifyOAuthReq

返回

Promise
SignInRes

示例

// 在授权回调页面调用,自动获取URL参数
const { data, error } = await auth.verifyOAuth();

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

// 验证成功后跳转到首页
window.location.href = "/home";
}

verifyOtp

async verifyOtp(params: VerifyOtpReq): Promise<SignInRes>

验证一次性密码(OTP),完成登录或注册流程。

提示

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

  • 验证通过邮箱或手机号发送的一次性密码(OTP)
  • 支持邮箱和手机号两种验证方式(二选一)
  • 验证成功后自动登录用户并返回会话信息
  • 适用于注册、登录、密码重置等场景

参数

params
VerifyOtpReq

返回

Promise
SignInRes

示例

const phone = "13800138000";

// 1.获取验证码
const { data } = await auth.resend({ phone });

// 2.验证验证码
const { data: verifyData, error } = await auth.verifyOtp({
phone: "13800138000",
token: "123456",
messageId: data.messageId,
});

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

resend

async resend(params: ResendReq): Promise<ResendRes>

重新发送验证码到邮箱或手机号。

提示

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

  • 向用户重新发送邮箱或手机号的验证码
  • 支持注册、邮箱变更、手机号变更等场景
  • 重新发送后获取新的消息 ID,用于后续验证流程
  • 提供频率限制保护,防止恶意重发

参数

params
ResendReq

返回

Promise
ResendRes

示例

// 第一次发送验证码
const { data, error } = await auth.signInWithOtp({ phone: "13800138000" });

// 验证码校验回调
let signUpVerify = data.verifyOtp;

// 重新发送验证码,获取新的messageId
const { data: resendData, error: resendError } = await auth.resend({
phone: "13800138000",
type: "signup",
});

if (resendError) {
console.error("重发验证码失败:", resendError.message);
console.error("错误代码:", resendError.code);
} else {
console.log("验证码已重发,消息ID:", resendData.messageId);

// 将新的messageId传入signInWithOtp()或signUp()的callback参数
const verificationCode = "123456"; // 用户输入的验证码
const messageId = resendData.messageId; // 新的messageId

// 使用新的messageId进行验证
const { data: loginData, error: loginError } = await signUpVerify({
token: verificationCode,
messageId,
});

if (loginError) {
console.error("验证失败:", loginError.message);
} else {
console.log("验证成功");
}

// 开始倒计时
startCountdown(60);
}

其他工具

onAuthStateChange

onAuthStateChange(callback: OnAuthStateChangeCallback): OnAuthStateChangeResult

监听认证状态变化,实时响应登录、登出、令牌刷新等事件。

  • 监听用户认证状态的变化事件
  • 支持多种事件类型:登录、登出、令牌刷新、用户信息更新、身份源绑定等
  • 返回订阅对象,用于取消监听
  • 适用于构建响应式 UI 和状态管理

参数

callback
OnAuthStateChangeCallback

状态变化回调函数

返回

OnAuthStateChangeResult
object

示例

const { data } = auth.onAuthStateChange((event, session, info) => {
console.log("认证状态变化:", event, session, info);

switch (event) {
case "INITIAL_SESSION":
console.log("初始会话已建立");
if (session) {
console.log("用户已登录:", session.user?.email);
} else {
console.log("用户未登录");
}
break;

case "SIGNED_IN":
console.log("用户登录成功:", session.user?.email);
// 更新UI显示
document.getElementById("loginBtn").style.display = "none";
document.getElementById("userInfo").style.display = "block";
document.getElementById("userEmail").innerText =
session.user?.email || "";
break;

case "SIGNED_OUT":
console.log("用户已登出");
// 更新UI显示
document.getElementById("loginBtn").style.display = "block";
document.getElementById("userInfo").style.display = "none";
break;

case "PASSWORD_RECOVERY":
console.log("密码已重置");
// 显示密码重置界面
document.getElementById("passwordResetForm").style.display = "block";
break;

case "TOKEN_REFRESHED":
console.log("令牌已刷新");
break;

case "USER_UPDATED":
console.log("用户信息已更新");
// 更新用户信息显示
if (session) {
document.getElementById("userEmail").innerText =
session.user?.email || "";
document.getElementById("userAvatar").src =
session.user?.user_metadata?.avatarUrl || "";
}
break;

case "BIND_IDENTITY":
console.log("身份源绑定结果");
if (!!info.error) {
console.log("身份源绑定失败");
} else {
console.log("身份源已绑定");
}
break;
}
});

// 取消监听(在组件卸载时调用)
// data.subscription.unsubscribe();

getClaims

async getClaims(): Promise<GetClaimsRes>

获取当前访问令牌中的声明信息,用于调试和权限检查。

  • 解析当前访问令牌的 JWT 声明信息
  • 返回令牌的头部、声明和签名部分
  • 用于调试令牌信息、检查权限和验证令牌状态
  • 需要用户已登录状态才能获取令牌信息

参数

无参数

返回

Promise
GetClaimsRes

示例

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

if (error) {
console.error("获取声明失败:", error.message);
} else {
console.log("令牌声明信息:", data.claims);
console.log("令牌头部信息:", data.header);
console.log("令牌签名:", data.signature);

// 解析用户信息
if (data.claims) {
console.log("用户ID:", data.claims.sub);
console.log("过期时间:", new Date(data.claims.exp * 1000).toLocaleString());
console.log("签发时间:", new Date(data.claims.iat * 1000).toLocaleString());
console.log("用户角色:", data.claims.role);
}
}

toDefaultLoginPage

async toDefaultLoginPage(params: authModels.ToDefaultLoginPage): Promise<void>

跳转系统默认登录页,兼容 web 和微信小程序端。

  • 支持跳转到系统默认登录页面
  • 兼容 Web 端和微信小程序端
  • 可配置登录页面的版本和重定向地址
  • 支持携带自定义参数跳转
本地调试

如果开发 Web 端应用,由于 __auth 登录页面静态资源存放于静态网站托管中,所以在本地调试时需要配置代理才能成功跳转 __auth 登录页面。

推荐使用 Whistle 工具进行代理配置。 __auth 登录页面的访问域名可在静态网站托管-配置信息-默认域名中查看。

假设本地启动应用的访问地址为 http://localhost:3000__auth 登录页面的访问域名为lowcode-xxx-xxx.tcloudbaseapp.com,则 Whistle 代理的 Rules 配置如下:

https://lowcode-xxx-xxx.tcloudbaseapp.com http://localhost:3000

# 应用其他路径代理配置

运行应用后,通过 https://lowcode-xxx-xxx.tcloudbaseapp.com 即可访问应用

参数

params
ToDefaultLoginPageReq

返回

Promise
CommonRes

示例

const app = cloudbase.init({
env: "xxxx-yyy",
region: "ap-shanghai", // 不传默认为上海地域
});

const auth = app.auth();

await auth.toDefaultLoginPage({
config_version: "env",
app_id: "app-xxx",
redirect_uri: "xxx",
});

错误码

登录错误

错误码说明
not_found用户不存在
password_not_set当前用户未设置密码,请使用验证码登录或第三方登录方式
invalid_password密码不正确
user_pending该用户未激活
user_blocked该用户被停用
invalid_status您已经超过了密码最大重试次数, 请稍后重试
invalid_two_factor二次验证码不匹配或已过时

注册错误

错误码说明
failed_precondition你输入的手机号或邮箱已被注册,请使用其他号码

验证码相关错误

错误码说明
failed_precondition从第三方获取用户信息失败
resource_exhausted你尝试过于频繁,请稍后重试
invalid_argument您输入的验证码不正确或已过期
aborted你尝试的次数过多,请返回首页,稍后重试
permission_denied您当前的会话已过期,请返回重试
captcha_required需要输入验证码, 需根据反机器人服务接入
captcha_invalid验证码不正确, 需根据反机器人服务接入

其他错误

错误码说明
unreachable网络错误,请检查您的网络连接,稍后重试

错误描述

错误码错误描述说明
permission_deniedcors permission denied,please check if {url} in your client {env} domains请在“云开发平台/环境配置/安全来源/安全域名”中检查对应{env}环境下是否已经配置了安全域名{url},配置后 10 分钟生效

完整类型定义

SignInAnonymouslyReq

// 匿名登录参数
interface SignInAnonymouslyReq {
provider_token?: string; // 提供令牌(可选)
}

User

interface User {
id: any; // 用户ID
aud: string; // 受众
role: string[]; // 用户角色
email: any; // 邮箱
email_confirmed_at: string; // 邮箱确认时间
phone: any; // 手机号
phone_confirmed_at: string; // 手机号确认时间
confirmed_at: string; // 确认时间
last_sign_in_at: string; // 最后登录时间
app_metadata: {
// 应用元数据
provider: any; // 提供商
providers: any[]; // 提供商列表
};
user_metadata: {
// 用户元数据
name: any; // 姓名
picture: any; // 头像
username: any; // 用户名
gender: any; // 性别
locale: any; // 地区
uid: any; // 用户ID
nickName: any; // 昵称
avatarUrl: any; // 头像URL
location: any; // 位置
hasPassword: any; // 是否有密码
};
identities: any; // 身份信息
created_at: string; // 创建时间
updated_at: string; // 更新时间
is_anonymous: boolean; // 是否匿名用户
// 新增字段
recovery_sent_at?: string; // 密码重置发送时间
email_change_sent_at?: string; // 邮箱变更发送时间
phone_change_sent_at?: string; // 手机号变更发送时间
new_email?: string; // 新邮箱地址
new_phone?: string; // 新手机号
}

Session

interface Session {
access_token: string; // 访问令牌
refresh_token: string; // 刷新令牌
expires_in: number; // 过期时间(秒)
token_type: string; // 令牌类型
user: User; // 用户信息
// 新增字段
provider_token?: string; // 第三方平台令牌
provider_refresh_token?: string; // 第三方平台刷新令牌
expires_at?: number; // 过期时间戳
issued_at?: number; // 签发时间戳
scope?: string; // 授权范围
token_id?: string; // 令牌ID
}

AuthError

// 认证错误类型
interface AuthError extends Error {
code: (string & {}) | undefined; // 错误代码
status: number | undefined; // HTTP状态码
// 常见错误代码
// 400: 客户端错误
// - invalid_email: 邮箱格式错误
// - invalid_phone: 手机号格式错误
// - invalid_password: 密码格式错误
// - user_not_found: 用户不存在
// - email_already_exists: 邮箱已存在
// - phone_already_exists: 手机号已存在
// - username_already_exists: 用户名已存在
// - invalid_code: 验证码错误
// - code_expired: 验证码已过期
// - max_attempts_exceeded: 验证次数过多
// - password_too_weak: 密码强度不足
// - invalid_token: 令牌无效
// - token_expired: 令牌已过期
// - state_mismatch: 状态参数不匹配
// - provider_not_supported: 不支持的第三方平台
// - provider_mismatch: 第三方平台标识不匹配
// - failed_precondition: 前置条件失败
// - permission_denied: 权限不足
// - resource_exhausted: 资源耗尽
// - unreachable: 网络连接失败
// 500: 服务器错误
// - internal_error: 内部服务器错误
// - service_unavailable: 服务不可用
}

CommonRes

// 通用响应参数
interface CommonRes {
data: {}; // 成功时为空对象
error: AuthError | null; // 错误信息,成功时为null
}

SignUpReq

// 用户注册参数(四步验证流程)
interface SignUpReq {
email?: string; // 邮箱(可选,与手机号二选一)
phone?: string; // 手机号(可选,与邮箱二选一)
password: string; // 密码(必填)
username?: string; // 用户名称(可选),长度 5-24 位,支持字符中英文、数字、特殊字符(仅支持_-),不支持中文
nickname?: string; // 昵称(可选)
avatar_url?: string; // 头像URL(可选)
gender?: "MALE" | "FEMALE"; // 性别(可选)
}

SignOutReq

// 用户登出参数
interface SignOutReq {
options?: {
// 配置选项(可选)
redirectTo?: string; // 登出后的重定向地址
clearStorage?: boolean; // 是否清除本地存储(默认true)
};
}

SignInWithPasswordReq

// 密码登录参数
interface SignInWithPasswordReq {
username?: string; // 用户名称(可选,与邮箱、手机号三选一),长度 5-24 位,支持字符中英文、数字、特殊字符(仅支持_-),不支持中文
email?: string; // 邮箱(可选,与用户名、手机号三选一)
phone?: string; // 手机号(可选,与用户名、邮箱三选一)
password: string; // 密码(必填)
is_encrypt?: boolean; // 是否加密,默认为false
}

SignInWithIdTokenReq

// ID令牌登录参数
interface SignInWithIdTokenReq {
provider?: string; // 第三方平台标识(可选)
token: string; // 第三方平台的身份令牌(必填)
// 新增字段
provider?: string; // 第三方平台标识(可选,与provider参数重复,保留兼容性)
}

SignInWithOtpReq

// OTP登录参数
interface SignInWithOtpReq {
email?: string; // 邮箱(可选,与手机号二选一)
phone?: string; // 手机号(可选,与邮箱二选一)
}

SignInWithOAuthReq

// OAuth授权参数
interface SignInWithOAuthReq {
provider: string; // 第三方平台标识(必填)
options?: {
// 配置选项(可选)
redirectTo?: string; // 回调地址,默认为当前页面
skipBrowserRedirect?: boolean; // 是否跳转至授权页面,默认为false
state?: string; // 状态参数,用于安全验证,默认为随机字符串(格式:prd-{provider}-{随机字符串})
queryParams?: Record<string, string>; // 额外的查询参数,将合并到授权 URI 中
type?: "sign_in" | "bind_identity"; // 类型(可选),默认为'sign_in', sign_in: 登录,bind_identity: 绑定身份
};
}

SetSessionReq

// 会话设置参数
interface SetSessionReq {
access_token: string; // 访问令牌(必填)
refresh_token: string; // 刷新令牌(必填)
}

VerifyOAuthReq

// OAuth验证参数
interface VerifyOAuthReq {
code?: string; // 授权码(可选,默认从URL参数获取)
state?: string; // 状态参数(可选,默认从URL参数获取)
provider?: string; // 第三方平台标识(可选,默认从session获取)
}

VerifyOtpReq

// OTP验证参数
interface VerifyOtpReq {
type?:
| "sms"
| "phone_change"
| "signup"
| "invite"
| "magiclink"
| "recovery"
| "email_change"
| "email"; // 验证类型(可选)
email?: string; // 邮箱(可选,与手机号二选一)
phone?: string; // 手机号(可选,与邮箱二选一)
token: string; // 验证码(必填)
messageId: string; // 验证码对应ID(必填)
}

UpdateUserReq

// 用户信息更新参数
interface UpdateUserReq {
email?: string; // 邮箱地址
phone?: string; // 手机号
username?: string; // 用户名称(可选),长度 5-24 位,支持中英文、数字、特殊字符(仅支持_-),不支持中文
description?: string; // 描述(可选)
avatar_url?: string; // 头像URL(可选)
nickname?: string; // 昵称(可选)
gender?: "MALE" | "FEMALE"; // 性别(可选)
}

LinkIdentityReq

// 身份源绑定参数
interface LinkIdentityReq {
provider: string; // 身份源标识(必填)
}

UnlinkIdentityReq

// 身份源解绑参数
interface UnlinkIdentityReq {
provider: string; // 身份源标识(必填)
}

ReauthenticateReq

// 重新认证参数
interface ReauthenticateReq {
// 无入参,使用当前登录用户的信息
}

ResendReq

// 重发验证码参数
interface ResendReq {
email?: string; // 邮箱(可选,与手机号二选一)
phone?: string; // 手机号(可选,与邮箱二选一)
type?: "signup" | "email_change" | "phone_change" | "sms"; // 类型(可选)
}

ResendRes

// 重发验证码响应参数
interface ResendRes {
data: {
messageId?: string; // 消息ID(验证码ID)
};
error: AuthError | null; // 错误信息,成功时为null
}

SignInWithOtpRes

// OTP登录响应参数
interface SignInWithOtpRes {
data: {
verifyOtp?: (params: {
token: string;
messageId?: string;
}) => Promise<SignInRes>; // 验证码回调函数,支持messageId参数
};
error: AuthError | null; // 错误信息,成功时为null
}

SignUpRes

// 用户注册响应参数
interface SignUpRes {
data: {
verifyOtp?: (params: {
token: string;
messageId?: string;
}) => Promise<SignInRes>; // 验证码回调函数,支持messageId参数
};
error: AuthError | null;
}

SignInOAuthRes

// OAuth授权响应参数
interface SignInOAuthRes {
data: {
url?: string; // 授权页面URL
provider?: string; // 第三方平台标识
scopes?: string; // 授权范围
};
error: AuthError | null; // 错误信息,成功时为null
}

LinkIdentityRes

// 身份源绑定响应参数
interface LinkIdentityRes {
data: {
provider?: string; // 绑定的身份源标识
type?: "sign_in" | "bind_identity" | ""; // 类型(可选),默认为'sign_in', sign_in: 登录,bind_identity: 绑定身份
};
error: AuthError | null; // 错误信息,成功时为null
}

Identity

interface Identity {
id: string; // 身份源标识
name: string; // 身份源名称
picture: string; // 头像URL
}

GetUserIdentitiesRes

// 用户身份源获取响应参数
interface GetUserIdentitiesRes {
data: {
identities?: Array<{
id: string; // 身份源标识
name: string; // 身份源名称
picture: string; // 头像URL
}>;
};
error: AuthError | null; // 错误信息,成功时为null
}

GetClaimsRes

// 声明信息获取响应参数
interface GetClaimsRes {
data: {
// 令牌声明信息
claims?: {
iss: string; // issuer
sub: string; // subject
aud: string; // audience
exp: number; // expiration time
iat: number; // issued at
at_hash: string; // access token hash
name: string; // 名称
picture?: string; // 头像URL
email?: string; // 邮箱
phone_number?: string; // 手机号
scope: string; // 授权范围
project_id: string; // 项目ID
provider?: string; // 第三方平台标识
provider_type?: string; // 第三方平台类型
groups?: string[]; // 用户组
meta?: {
wxOpenId?: string;
wxUnionId?: string;
};
user_id: string; // 用户ID
roles: string[]; // 角色
user_type: string; // 用户类型
client_type: string; // 客户端类型
is_system_admin: boolean; // 是否系统管理员
};
// 令牌头部信息
header?: {
alg: string; // 加密算法
kid: string; // 令牌ID
};
signature?: string; // 令牌签名
};
error: AuthError | null; // 错误信息,成功时为null
}

ResetPasswordForOldReq

// 通过旧密码重置密码参数
interface ResetPasswordForOldReq {
new_password: string; // 新密码(必填)
old_password: string; // 旧密码(必填)
}

DeleteMeReq

// 删除当前用户参数
interface DeleteMeReq {
password: string; // 用户密码(必填)
}

SignInRes

// 登录响应参数
interface SignInRes {
data: {
user?: User; // 用户信息
session?: Session; // 会话信息
};
error: AuthError | null; // 错误信息,成功时为null
}

GetUserRes

// 用户信息获取响应参数
interface GetUserRes {
data: {
user?: User; // 用户详细信息
};
error: AuthError | null; // 错误信息,成功时为null
}

OnAuthStateChangeEvent

// 认证状态变化事件类型
type OnAuthStateChangeEvent =
| "SIGNED_OUT" // 用户已登出
| "SIGNED_IN" // 用户登录成功
| "INITIAL_SESSION" // 初始会话已建立
| "PASSWORD_RECOVERY" // 密码已重置
| "TOKEN_REFRESHED" // 令牌已刷新
| "USER_UPDATED" // 用户信息已更新
| "BIND_IDENTITY"; // 身份源绑定结果

OnAuthStateChangeCallback

// 认证状态变化回调函数类型
type OnAuthStateChangeCallback = (
event: OnAuthStateChangeEvent,
session: Session
) => void;

ResetPasswordForEmailRes

// 邮箱重置密码响应参数
interface ResetPasswordForEmailRes {
data: {
updateUser?: (attributes: UpdateUserAttributes) => Promise<SignInRes>; // 验证码回调函数,支持新密码参数
};
error: AuthError | null; // 错误信息,成功时为null
}

UpdateUserAttributes

// 用户属性更新参数
interface UpdateUserAttributes {
nonce: string; // 验证码
password: string; // 新密码
}

ReauthenticateRes

// 重新认证响应参数
interface ReauthenticateRes {
data: {
updateUser?: (attributes: UpdateUserAttributes) => Promise<SignInRes>; // 验证码回调函数,支持新密码参数
};
error: AuthError | null; // 错误信息,成功时为null
}