跳到主要内容

身份认证

提示

新登录体系下,确保一个环境对应一个 tcb 实例(避免多次初始化相同环境的 tcb 实例)

App.auth()

接口描述

返回 Auth 对象,身份认证相关的属性和方法都在 Auth 对象中

接口声明:auth(): Auth

危险

@cloudbase/js-sdk@2.x 版本将只支持 local 方式(Web 端在显式退出登录之前 30 天保留身份验证状态)存储身份状态。(原 1.x 版本的 sessionnone 模式不再支持)

示例代码

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

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

const auth = app.auth();

注册/登录/登出相关

提示

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

Auth.signUp()

接口描述

接口功能:注册用户,目前支持手机号验证码注册,邮箱验证码注册。

接口声明:signUp(params: SignUpRequest): Promise<LoginState>

接口入参: SignUpRequest

字段类型必填说明
phone_numberstring注册所用手机号,phone_number 与 email 必须任选其一使用
emailstring注册所用邮箱 ,phone_number 与 email 必须任选其一使用
verification_codestring验证码,可通过Auth.getVerification获取
verification_tokenstring验证码 token,可通过Auth.verify获取
provider_tokenstring第三方 provider token,用于绑定第三方用户信息,可通过Auth.grantProviderToken获取
passwordstring密码
namestring用户名
genderstring性别
picturestring头像
localestring地址

接口出参: LoginState

详见 LoginState

示例代码

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

const auth = app.auth();

// 例:手机号验证码注册

// 第一步:用户点击获取验证码,调用如下方法发送短信验证码,将 verificationInfo 存储到全局,方便第三步作为参数输入
const phoneNumber = "+86 13800000000";
const verification = await auth.getVerification({
phone_number: phoneNumber,
});

// 若使用邮箱验证,第一步代码改为
{
const email = "test@example.com";
const verification = await auth.getVerification({
email: email,
});
}

// 验证码验证
// 调用发送短信接口后,手机将会收到云开发的短信验证码。
// 用户填入短信验证码,可以调用下面的接口进行验证。

// 第二步:等待用户在页面中输入短信验证码
const verificationCode = userInputCode; // 6位验证码

// 第三步:待用户输入完验证码之后,验证短信验证码
const verificationTokenRes = await auth.verify({
verification_id: verification.verification_id,
verification_code: verificationCode,
});

// 第四步:注册
// 如果该用户已经存,则登录
if (verification.is_user) {
await auth.signIn({
username: phoneNumber,
verification_token: verificationTokenRes.verification_token,
});
} else {
// 否则,则注册新用户,注册新用户时,可以设置密码,用户名
// 备注:signUp 成功后,会自动登录
await auth.signUp({
phone_number: phoneNumber,
verification_code: verificationCode,
verification_token: verificationTokenRes.verification_token,
// 可选,设置昵称
name: "手机用户",
// 可选,设置密码
password: "password",
// 可选,设置登录用户名
username: "username",
});
}

Auth.signIn()

提示

手机号登录 仅支持 上海 地域

接口描述

接口功能:在已完成注册后,可通过该方法进行用户登录,目前支持手机号,邮箱,用户名密码登录。

接口声明:signIn(params: SignInRequest): Promise<LoginState>

接口入参: SignInRequest

字段类型必填说明
usernamestring用户手机号,邮箱或自定义用户名,如果是中国手机号要带上“+86 ”国家码,例如“+86 138xxxxxxxxx”
passwordstring用户密码 ,password 与 verification_token 必须任选其一
verification_tokenstring验证码 token ,password 与 verification_token 必须任选其一,可通过Auth.verify获取

接口出参: LoginState

详见 LoginState

示例代码

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

const auth = app.auth();

// 已完成注册
// 例:手机号登录
const phoneNumber = "+86 13800000000";

await auth.signIn({
username: phoneNumber,
password: "your password",
});

// 例:邮箱登录
const email = "test@example.com";

await auth.signIn({
username: email,
password: "your password",
});

// 例:用户名登录
const username = "myname";
await auth.signIn({
username,
password: "your password",
});

Auth.signOut()

接口描述

接口功能:退出登录

接口声明:signOut(params?: SignoutRequest): Promise<SignoutReponse>

接口入参: SignoutRequest

字段类型必填说明
redirect_uristring退出后的重定向页面地址
statestring在有 redirect_uri 时,会将该参数放在 redirect_uri 的链接参数 state 中,用于区分某个身份源

接口出参: SignoutReponse

字段类型说明
redirect_uristring重定向页面地址,如果入参传了 redirect_uri 或第三方认证源配置了 redirect_uri,则会有返回

示例代码

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

const auth = app.auth();

// 监听登录态变化
auth.onLoginStateChanged((params) => {
console.log(params);
const { eventType } = params?.data || {};
switch (eventType) {
case "sign_in":
// 登录成功
break;
case "sign_out":
// 退出登录成功
break;
case "credentials_error":
// 权限失效
break;
default:
return;
}
});

await auth.signOut();

Auth.signInAnonymously()

接口描述

接口功能:匿名登录

接口声明 signInAnonymously(): Promise<LoginState>

接口入参: 无

接口出参: LoginState

详见 LoginState

示例代码

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

const auth = app.auth();
await auth.signInAnonymously();

匿名登录转正示例

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

const auth = app.auth()
// 1. 匿名登录
await auth.signInAnonymously()

// 2. 获取accesstoken
const access_token = await auth.getAccessToken()

// 3. 转正注册
await auth.signUp({
...// 传参参考 Auth.signUp接口
anonymous_token: access_token
})

Auth.setCustomSignFunc()

接口描述

接口功能:设置获取自定义登录 ticket 函数

接口声明:setCustomSignFunc(getTickFn: GetCustomSignTicketFn): void

接口入参: GetCustomSignTicketFn

字段类型说明
getTickFn() => Promise<string>获取自定义登录 ticket 的函数

接口出参: 无

示例代码

const app = cloudbase.init({
env: "xxxx-yyy",
region: "ap-shanghai", // 不传默认为上海地域
});
const auth = app.auth();
const getTickFn = new Promise((resolve, reject));
await auth.setCustomSignFunc(getTickFn);

Auth.signInWithCustomTicket()

接口描述

接口功能:自定义登录,配合Auth.setCustomSignFunc使用

接口声明:signInWithCustomTicket(): Promise<LoginState>

接口入参: 无

接口出参: LoginState

详见 LoginState

示例代码

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

const auth = app.auth();
await auth.signInWithCustomTicket();

Auth.signInWithOpenId()

提示

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

接口描述

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

接口声明:signInWithOpenId(params?: SignInWithOpenIdReq): Promise<LoginState>

接口入参: SignInWithOpenIdReq

字段类型必填默认值说明
useWxCloudbooleantruetrue: 使用微信云开发模式进行请求,需开通小程序微信云开发环境; false:使用普通 http 请求

接口出参: LoginState

详见 LoginState

示例代码

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

const auth = app.auth();
await auth.signInWithOpenId();

Auth.signInWithUnionId()

提示

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

接口描述

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

接口声明:signInWithUnionId(): Promise<LoginState>

接口入参: 无

接口出参: LoginState

详见 LoginState

示例代码

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

const auth = app.auth();
await auth.signInWithUnionId();

Auth.signInWithPhoneAuth()

提示

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

接口描述

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

接口声明:signInWithPhoneAuth(params: SignInWithPhoneAuthReq): Promise<LoginState>

接口入参: SignInWithPhoneAuthReq

字段类型必填默认值说明
phoneCodestring微信小程序手机号授权码,通过微信小程序手机号快速验证组件

接口出参: LoginState

详见 LoginState

示例代码

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

const auth = app.auth();
await auth.signInWithPhoneAuth({ phoneCode: "xxx" });

Auth.signInWithSms()

提示

仅支持 上海 地域

接口描述

接口功能:短信验证码登陆

接口声明:signInWithSms(params: SignInWithSmsReq): Promise<LoginState>

接口入参: SignInWithSmsReq

字段类型必填默认值说明
verificationInfoobject验证码 token 信息{}Auth.getVerification的返回值
verificationCodestring验证码获取到的短信验证码,调用Auth.getVerification后会发送验证码
phoneNumstring手机号获取验证码的手机号,中国手机号要带上“+86 ”国家码,例如“+86 138xxxxxxxxx”

接口出参: LoginState

详见 LoginState

示例代码

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

const auth = app.auth();

const phoneNumber = "+86 13800000000";

// 第一步:用户点击获取验证码,调用如下方法发送短信验证码,将 verificationInfo 存储到全局,方便第三步作为参数输入
const verificationInfo = await auth.getVerification({
phone_number: phoneNumber,
});

// 第二步:等待用户在页面中输入短信验证码
const verificationCode = userInputCode; // 6位验证码

// 第三步:待用户输入完验证码之后,验证短信验证码,并登录
await auth.signInWithSms({
verificationInfo,
verificationCode, // 用户输入的短信验证码
phoneNum: phoneNumber, // 用户手机号
});

Auth.signInWithEmail()

接口描述

接口功能:邮箱验证码登陆

接口声明:signInWithEmail(params: SignInWithEmailReq): Promise<LoginState>

接口入参: SignInWithEmailReq

字段类型必填默认值说明
verificationInfoobject验证码 token 信息{}Auth.getVerification的返回值
verificationCodestring验证码获取到的邮箱验证码,调用Auth.getVerification后会发送验证码
emailstring邮箱获取验证码的邮箱地址

接口出参: LoginState

详见 LoginState

示例代码

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

const auth = app.auth();

const email = "test@example.com";

// 第一步:用户点击获取验证码,调用如下方法发送邮箱验证码,将 verificationInfo 存储到全局,方便第三步作为参数输入
const verificationInfo = await auth.getVerification({
email: email,
});

// 第二步:等待用户在页面中输入邮箱验证码
const verificationCode = userInputCode; // 6位验证码

// 第三步:待用户输入完验证码之后,验证邮箱验证码,并登录
await auth.signInWithEmail({
verificationInfo,
verificationCode, // 用户输入的邮箱验证码
email: email, // 用户邮箱
});

Auth.toDefaultLoginPage()

提示

使用此功能请升级 @cloudbase/js-sdk 至 2.18.0 及以后版本

接口描述

接口功能:跳转系统默认登录页,兼容 web 和微信小程序端

接口声明:toDefaultLoginPage(params: authModels.ToDefaultLoginPage): Promise<void>

接口入参: ToDefaultLoginPage

字段类型含义默认值说明
config_versionstring默认登录页面的登录配置版本env1、‘env’表示托管登录页配置,可在“云开发平台-身份认证”中设置,2、非‘env’表示使用独立的托管登录页配置,可在“云开发平台-可视化低代码-访问控制”中设置,相应的 config_version 可以在应用自动跳转的__auth 登录页面的链接中参数获取到
redirect_uristring登录后重定向地址默认为当前页面地址
app_idstring应用 idconfig_version 不是‘env’的时候为必填项,如 app-xxx
queryobject跳转到默认登录页要携带的参数

接口出参: 无

示例代码

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",
});

第三方平台登录相关

Auth.genProviderRedirectUri()

接口描述

接口功能:生成第三方平台授权 Uri (如微信二维码扫码授权网页)

接口声明:genProviderRedirectUri(params: GenProviderRedirectUriRequest): Promise<GenProviderRedirectUriResponse>

接口入参: GenProviderRedirectUriRequest

字段类型必填说明
provider_idstring第三方平台 ID,参考系统内置三方平台列表
provider_redirect_uristring第三方平台重定向 Uri,授权完成后,重定向时会在 url 中携带 code 参数
statestring用户自定义状态标识字段,识别三方平台回调来源
other_params{sign_out_uri?:string}其他参数

接口出参: GenProviderRedirectUriResponse

字段类型必填说明
uristring客户端请求
signout_uristring登出 Uri

示例代码

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

const auth = app.auth();
const providerId = "test_provider_id"; // 第三方平台 ID
const providerUri = "test_provider_redirect_uri"; // 第三方平台重定向 Uri
const state = "wx_open"; // 用户自定义状态标识字段
const otherParams = { sign_out_uri: "test_sign_out_uri" }; // 其他参数

// 三方平台授权登录示例

// 1. 获取第三方平台授权页地址(如微信授权)
const { uri } = await auth.genProviderRedirectUri({
provider_id: providerId,
provider_redirect_uri: providerUri,
state: state,
other_params: otherParams,
});

// 2. 访问uri (如 location.href = uri)

// 3. 授权 (如微信扫码授权)

// 4. 回调至 provider_redirect_uri 地址(url query中携带 授权code,state等参数),此时检查 state 是否符合预期(如 自己设置的 wx_open)
const provider_code = "your provider code";

// 5. state符合预期(微信开放平台授权 wx_open),则获取该三方平台token
const { provider_token } = await auth.grantProviderToken({
provider_id: "wx_open",
provider_redirect_uri: "cur page", // 指定三方平台跳回的 url 地址
provider_code: provider_code, // 第三方平台跳转回页面时,url param 中携带的 code 参数
});

// 6. 通过 provider_token 仅登录或登录并注册(与云开发平台-登录方式-身份源登录模式配置有关)
await auth.signInWithProvider({
provider_token,
});

Auth.grantProviderToken()

接口描述

接口功能:提供第三方平台登录 token

接口声明:grantProviderToken(params: GrantProviderTokenRequest): Promise<GrantProviderTokenResponse>

接口入参: GrantProviderTokenRequest

字段类型必填说明
provider_idstring第三方平台 ID,参考系统内置三方列表
provider_redirect_uristring第三方平台重定向 uri
provider_codestring第三方平台授权 code(重定向 uri 中携带)
provider_access_tokenstring第三方平台访问 token(重定向 uri 中携带)
provider_id_tokenstring第三方平台 ID token(重定向 uri 中携带)

接口出参: GrantProviderTokenResponse

字段类型必填说明
provider_tokenstring第三方平台 token
expires_innumber有效期
provider_profileProviderProfile第三方身份源信息
ProviderProfile
字段类型必填说明
provider_idstring默认内置的三方 providerid,wx_open, wx_mp
substring第三方用户 id (如 wxopenid)
namestring名称
phone_numberstring手机号
picturestring头像
metaProviderProfileMeta第三方身份源扩展信息(小程序返回)
ProviderProfileMeta
字段类型必填说明
appidstring小程序的 appid
openidstring小程序的 openid

示例代码

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

const auth = app.auth();
const providerId = "wx_open"; // 微信开放平台
auth.grantProviderToken({
provider_id: providerId,
provider_redirect_uri: "cur page", // 指定三方平台跳回的 url 地址
provider_code: "provider code", // 第三方平台跳转回页面时,url param 中携带的 code 参数
});

Auth.signInWithProvider()

接口描述

接口功能:第三方平台登录。如果用户不存在,会根据云开发平台-登录方式中对应身份源的登录模式配置,判断是否自动注册

接口声明:signInWithProvider(params: SignInWithProviderRequest): Promise<LoginState>

接口入参: SignInWithProviderRequest

字段类型必填说明
provider_tokenstring第三方平台 token,可通过Auth.grantProviderToken获取

接口出参: LoginState

详见 LoginState

示例代码

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

const auth = app.auth();
const providerToken = "test_provider_token";
auth.signInWithProvider({
provider_token: providerToken,
});

Auth.unbindProvider()

接口描述

接口功能:解除第三方绑定

接口声明:unbindProvider(params: UnbindProviderRequest): Promise<void>

接口入参: UnbindProviderRequest

字段类型必填说明
provider_idstring第三方平台 ID,参考第三方绑定时的回包,可通过Auth.getProviders获取

接口出参: 无

示例代码

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

const auth = app.auth();

// 完成登录后

// 获取绑定第三方平台ID
const { id } = await auth.getProviders();

await auth.unbindProvider({
provider_id: id,
});

Auth.getProviders()

接口描述

接口功能:获取第三方绑定列表

接口声明:getProviders(): Promise<UserProfileProvider>

接口入参: 无

接口出参: UserProfileProvider

字段类型必填说明
idstring第三方平台 ID
provider_user_idstring第三方平台用户 ID
namestring第三方平台昵称

示例代码

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

const auth = app.auth();

// 完成登录后

await auth.getProviders();

Auth.bindWithProvider()

接口描述

接口功能:绑定第三方登录

接口声明:bindWithProvider(params: BindWithProviderRequest): Promise<void>

接口入参: BindWithProviderRequest

字段类型必填说明
provider_tokenstring第三方平台授权 token,可通过Auth.grantProviderToken 获取

接口出参: 无

示例代码

const app = cloudbase.init({
env: "xxxx-yyy",
region: "ap-shanghai", // 不传默认为上海地域
});
const provider_token = "test_provider_token"; // 参考Auth.grantProviderToken 获取

const auth = app.auth();
await auth.bindWithProvider({
provider_token,
});

验证/授权相关

Auth.verify()

提示

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

接口描述

接口功能:验证码验证,包括短信验证码、邮箱验证码

接口声明:verify(params: VerifyRequest): Promise<VerifyResponse>

接口入参: VerifyRequest

字段类型必填说明
verification_codestring验证码,可通过Auth.getVerification获取
verification_idstring验证码 ID,可通过Auth.getVerification获取

接口出参: VerifyResponse

字段类型必填说明
verification_tokenstring验证码 token

示例代码

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

const auth = app.auth();

// 例:手机号验证码/ 邮箱验证码注册

// 第一步:用户点击获取验证码,调用如下方法发送短信验证码,将 verificationInfo 存储到全局,方便第三步作为参数输入
const phoneNumber = "+86 13800000000";
const verificationInfo = await auth.getVerification({
phone_number: phoneNumber,
});

/*
// 若使用邮箱验证,第一步代码改为
const email = "test@example.com"
const verificationInfo = await auth.getVerification({
email: email
});
*/

// 第二步:等待用户在页面中输入验证码
const verificationCode = userInputCode; // 6位验证码

// 第三步:待用户输入完验证码之后,验证验证码
await auth.verify({
verification_code: verificationCode,
verification_id: verificationInfo.verification_id,
});

Auth.getVerification()

提示

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

接口描述

接口功能:获取短信/邮件验证码

接口声明:getVerification(params: GetVerificationRequest): Promise<GetVerificationResponse>

接口入参: GetVerificationRequest

字段类型必填说明
phone_numberstring手机号,中国手机号要带上“+86 ”国家码,例如“+86 138xxxxxxxxx”。与 email 二选一
emailstring邮箱,与 phone_number 二选一
targetTarget手机号或邮箱的应用场景
Target
含义
ANY不校验手机号或邮箱是否存在,使用场景:注册或者登录这种,没有登录态的
USER需要手机号或邮箱必须在系统中存在,且已经绑定用户

接口出参: GetVerificationResponse

字段类型说明
verification_idstring验证码 id
is_userboolean是否是注册用户

示例代码

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

const auth = app.auth();

const verificationCode = "000000";
const phoneNumber = "+86 13800000000";
// const email = "test@example.com";

const verification = await auth.getVerification({
phone_number: phoneNumber,
// email: email,
});

Auth.sudo()

接口描述

接口功能:通过 sudo 接口获取高级操作权限,如修改密码(Auth.setPassword)、修改手机号(Auth.bindPhoneNumber)、修改邮箱(Auth.bindEmail)、删除用户(Auth.deleteMe)等操作

接口声明:Auth.sudo(params: SudoRequest): Promise<SudoResponse>

接口入参: SudoRequest

字段类型必填说明
passwordstring密码,password 和 verification_token 二选一,如果绑定了手机号,则必须使用 verification_token 进行 sudo
verification_tokenstringtoken 令牌,通过账号绑定的手机号或邮箱验证获取,可通过Auth.verify获取

接口出参: SudoResponse

字段类型说明
sudo_tokenstring高级权限 token 令牌, 如果用户只开启三方登录, 没有设置密码的情况下,sudo token 为 "" 空字符串

示例代码

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

const auth = app.auth();

// 方式一:使用密码
const pass = "test_password";
const sudoRes = await auth.sudo({
password: pass,
});
console.log(sudoRes.sudo_token);

// 方式二:通过邮箱验证码,手机号验证码获取。
// 当前账号绑定的邮箱地址或手机号
const email = "test@example.com";
// const phoneNumber = "+86 13800000000"

// 第一步:用户点击获取验证码,调用如下方法发送验证码,将 verificationInfo 存储到全局,方便第三步作为参数输入
const verificationInfo = await auth.getVerification({
email: email,
// phone_number: phoneNumber
});

// 第二步:等待用户在页面中输入验证码
const verificationCode = userInputCode; // 6位验证码

// 第三步:待用户输入完验证码之后,验证验证码
const verificationTokenRes = await auth.verify({
verification_id: verificationInfo.verification_id,
verification_code: verificationCode,
});

// 第四步:获取 sudo_token
const sudoRes = await auth.sudo({
verification_token: verificationTokenRes.verification_token,
});
console.log(sudoRes.sudo_token);

// 可调用auth.setPassword、auth.bindEmail、auth.bindPhoneNumber、auth.deleteMe等方法

Auth.getAccessToken()

接口描述

接口功能:获取访问凭证 accessToken

接口声明:Auth.getAccessToken(): Promise<GetAccessTokenResponse>

接口入参: 无

接口出参: GetAccessTokenResponse

字段类型说明
accessTokenstring访问令牌
envstring环境 id

示例代码

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

const auth = app.auth();

// 某种方式登录后...

// 获取access_token
const { accessToken } = await auth.getAccessToken();

console.log(accessToken);

用户信息相关

Auth.getCurrentUser()

接口描述

接口功能:Auth.currentUser的异步操作,返回表示当前用户的 User 实例

接口声明:getCurrentUser(): Promise<User | null>

接口入参: 无

接口出参: User

详见 User

示例代码

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

// 执行某种登录之后...
const user = await auth.getCurrentUser();

Auth.bindPhoneNumber()

提示

仅支持 上海 地域

接口描述

接口功能:绑定手机号

接口声明:bindPhoneNumber(params: BindPhoneRequest): Promise<void>

接口入参: BindPhoneRequest

字段类型必填说明
phone_numberstring新手机号,中国手机号要带上“+86 ”国家码,例如“+86 138xxxxxxxxx”
sudo_tokenstring高级权限 token 令牌,可通过Auth.sudo获取
verification_tokenstring验证码 token 令牌,可通过Auth.verify获取

接口出参: 无

示例代码

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

// 前置条件,先登录
const auth = app.auth();

// 第一步:获取 sudo token, 参考 Auth.sudo 接口获取
const sudo_token = "test_sudo_token";

const phone_number = "+86 13800000000";

// 第二步:用户点击获取验证码,调用如下方法发送短信验证码,将 verificationInfo 存储到全局,方便第四步作为参数输入
const verificationInfo = await auth.getVerification({
phone_number: phone_number,
});

// 第三步:等待用户在页面中输入短信验证码
const verificationCode = userInputCode; // 6位验证码

// 第四步:待用户输入完验证码之后,验证短信验证码
const verification_token_res = await auth.verify({
verification_id: verificationInfo.verification_id,
verification_code: verification_code,
});
const verification_token = verification_token_res.verification_token;

// 第五步:绑定手机号
await auth.bindPhoneNumber({
phone_number: phone_number,
sudo_token: sudo_token,
verification_token: verification_token,
});

Auth.bindEmail()

接口描述

接口功能:更新邮箱地址

接口声明:bindEmail(params: BindEmailRequest): Promise<void>

接口入参: BindEmailRequest

字段类型必填说明
emailstring邮箱地址
sudo_tokenstring高级权限 token 令牌,可通过Auth.sudo获取
verification_tokenstring验证码 token 令牌,可通过Auth.verify获取

接口出参: 无

示例代码

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

// 前置条件,先登录
const auth = app.auth();


// 第一步:获取 sudo token, 参考 Auth.sudo 接口获取
const sudoToken = "test_sudo_token"

const newEmail = "new@example.com";

// 第二步:用户点击获取验证码,调用如下方法发送邮箱验证码,将 verificationInfo 存储到全局,方便第四步作为参数输入
const verificationInfo = await auth.getVerification({
email: newEmail
});

// 第三步:等待用户在页面中输入短信验证码
const verificationCode = userInputCode; // 6位验证码

// 第四步:待用户输入完验证码之后,验证短信验证码
const newEmailTokenRes = await auth.verify({
verification_id: verificationInfo.verification_id,
verification_code: verificationCode,
});
const verificationToken = newEmailTokenRes.verification_token

// 第五步:绑定新邮箱
await auth.bindEmail({
email: newEmail,
sudo_token: sudoToken
verification_token: verificationToken
});

Auth.setPassword()

接口描述

接口功能:设置密码(已登录状态下,更新用户密码)

接口声明 setPassword(params: SetPasswordRequest): Promise<void>

接口入参: SetPasswordRequest

字段类型必填说明
new_passwordstring新密码
sudo_tokenstring高级权限 token 令牌,可通过Auth.sudo获取

接口出参: 无

示例代码

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

const auth = app.auth();

// 第一步:获取 sudo token,参考 Auth.sudo 接口获取
const sudoToken = "test_sudo_token";

// 第二步:更新密码
const newPassWord = "test_new_password";
await auth.setPassword({
new_password: newPassWord,
sudo_token: sudoToken,
});

Auth.getUserInfo()

接口描述

接口功能:获取用户信息

接口声明:getUserInfo(): Promise<UserInfo>

接口入参: 无

接口出参: UserInfo

字段类型说明
namestring用户昵称(区分与 登录用户名 username)
picturestring用户上传头像
phone_numberstring用户绑定手机号
email_verifiedboolean用户是否经过邮箱验证
birthdatestring用户生日
localestring用户设置语言
zoneinfostring时区
UserProfileProviderUserProfileProvider第三方平台配置
UserProfileProvider
字段类型必填说明
idstring默认内置的三方 provider_id,例如wx_open, wx_mp
provider_user_idstring第三方 provider 用户 id (如 wxopenid)
namestring名称
系统内置三方列表
provider_id含义
wx_open微信开放平台
wx_mp微信公众号

示例代码

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

const auth = app.auth();
const userInfo = await auth.getUserInfo();

Auth.queryUser()

危险

自定义登录场景和匿名登录场景,不支持使用该接口查询用户信息(自定义登录场景请在业务服务中自行查询用户信息,匿名登录场景不支持)

接口描述

接口功能:查询用户,可通过用户名、邮箱、手机号任意参数查询

接口声明:queryUser(queryObj: QueryUserProfileRequest): Promise<QueryUserProfileResponse>;

接口入参: QueryUserProfileRequest

字段类型必填说明
idArray<string>用户 uid 数组,最多支持查询 50 个 id 对应的用户
usernamestring用户名称
emailstring邮箱
phone_numberstring手机号,中国手机号要带上“+86 ”国家码,例如“+86 138xxxxxxxxx”

接口出参: QueryUserProfileResponse

字段类型必填说明
totalstring数量
dataSimpleUserProfile[]用户列表
SimpleUserProfile
字段类型必填说明
substring下标
namestring名称
picturestring图片
genderstring性别
localestring地点
emailstring邮箱
phone_numberstring手机号

示例代码

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

const auth = app.auth();
// const email = "test@example.com";
// const phoneNumber = "+86 13800000000";
const username = "test_username";

const userInfo = await auth.queryUser({
username: username,
// email,
// phone_number: phoneNumber,
});

Auth.resetPassword()

提示

手机号验证码方式 仅支持 上海 地域

接口描述

接口功能:重置密码(用户忘记密码无法登录时,可使用该接口强制设置密码)

接口声明:resetPassword(params: ResetPasswordRequest): Promise<void>

接口入参: ResetPasswordRequest

字段类型必填说明
emailstring邮箱, 与 phone_number 二选一
phone_numberstring手机号,与 email 二选一,中国手机号要带上“+86 ”国家码,例如“+86 138xxxxxxxxx”
new_passwordstring新密码
verification_tokenstring验证码 token 令牌,可通过Auth.verify获取

接口出参: 无

示例代码

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

const auth = app.auth();
const email = "testexample.com";
const newPassword = "test_new_password";
const phoneNumber = "+86 13800000000";

// 第一步:用户点击获取验证码,调用如下方法发送短信验证码,将 verificationInfo 存储到全局,方便第三步作为参数输入
const verificationInfo = await auth.getVerification({
phone_number: phoneNumber,
});

// 第二步:等待用户在页面中输入短信验证码
const verificationCode = userInputCode; // 6位验证码

// 第三步:待用户输入完验证码之后,验证短信验证码
const verificationToken = await auth.verify({
verification_id: verificationInfo.verification_id,
verification_code: verificationCode,
});

await auth.resetPassword({
// email: email,
phone_number: phoneNumber,
new_password: newPassword,
verification_token: verificationToken.verificationToken,
});

Auth.isUsernameRegistered()

接口描述

接口功能:检查用户名是否存在。

接口声明:isUsernameRegistered(username: string): Promise<boolean>

接口入参

字段类型必填说明
usernamestring用户名称

接口出参: boolean

含义
true存在
false不存在

示例代码

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

const auth = app.auth();

const username = "your_awesome_username";
const exist = await auth.isUsernameRegistered(username);

Auth.deleteMe()

接口描述

接口功能:删除用户。

接口声明:deleteMe(params: WithSudoRequest): Promise<UserProfile>

接口入参: WithSudoRequest

字段类型必填说明
sudo_tokenstring高级权限 token 令牌,可通过Auth.sudo获取

接口出参: UserProfile

字段类型说明
substring用户唯一标识)
namestring用户昵称(区分与 登录用户名 username)
usernamestring用户名称
picturestring用户上传头像
phone_numberstring用户绑定手机号
emailstring用户绑定邮箱
email_verifiedboolean用户是否经过邮箱验证
groupsArray<{id: string; expires_at?: string}>用户所属组/角色列表(字符串数组)
genderstring性别
birthdatestring用户生日
localestring用户设置语言
zoneinfostring时区
providersArray<UserProfileProvider>第三方平台配置

示例代码

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

const auth = app.auth();

// 1. 通过 sudo 操作获取 sudo_token,参考 Auth.sudo 方法

// 2. deleteMe

const user = await auth.deleteMe({
sudo_token: "your sudo_token",
});

Auth.loginScope()

接口描述

接口功能:查询用户的权限范围,可以用来判断是否为匿名登录状态

接口声明:loginScope(): Promise<string>

接口入参: 无

接口出参: string

示例代码

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

const auth = app.auth();

const username = "your_awesome_username";

// 经过某种方式登录后...

const loginScope = await auth.loginScope();
if (loginScope === "anonymous") {
console.log("当前为匿名登录方式");
}

LoginState

LoginState 对象是对用户当前的登录态的抽象

Auth.hasLoginState()

接口描述

接口功能:返回当前登录状态 LoginState,如果未登录,则返回 null

接口声明:hasLoginState(): LoginState | null

接口入参: 无

接口出参: LoginState

详见 LoginState,返回 null 则表示当前未登录

示例代码

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

const loginState = app.auth().hasLoginState();

if (loginState) {
// 登录态有效
} else {
// 没有登录态,或者登录态已经失效
}

Auth.getLoginState()

接口描述

接口功能:Auth.hasLoginState()的异步操作,返回当前登录状态 LoginState,返回 null 则表示当前未登录

接口声明:getLoginState(): Promise<LoginState | null>

提示

此 API 是 hasLoginState 的异步模式,适用于本地存储为异步的平台,比如 React Native

接口入参: 无

接口出参: LoginState

详见 LoginState,返回 null 则表示当前未登录

示例代码

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

const loginState = await app.auth().getLoginState();

if (loginState) {
// 登录态有效
} else {
// 没有登录态,或者登录态已经失效
}

Auth.onLoginStateChanged()

接口描述

接口功能:监听登录状态变化,当登录状态发生变化时会触发该函数。比如调用注册/登录/登出相关接口、或者 Credentials 出现异常(如'credentials not found'、'no refresh token found in credentials'错误)等。

接口声明:onLoginStateChanged(callback: Function): Promise<void>

接口入参: OnLoginStateChangedParams

字段类型必填说明
callbackFunction回调函数
callback 回调函数入参定义
字段类型说明
namestring默认值为 loginStateChanged
dataobject包括 { msg?: string; eventType: 'sign_in' | 'sign_out' | 'credentials_error' }
提示

如果 eventType 是 sign_in 或 sign_out,还会返回当前登录状态 LoginState

接口出参: 无

示例代码

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

app.auth().onLoginStateChanged((params) => {
console.log(params);
const { eventType } = params?.data || {};
switch (eventType) {
case "sign_in":
// 登录成功
break;
case "sign_out":
// 退出登录成功
break;
case "credentials_error":
// 权限失效
break;
default:
return;
}
});

LoginState.user

类型:User | null

表示当前用户,具体请参考 User

如果没有登录,则为 null

User

User.update()

接口描述

接口功能:更新用户信息

接口声明:update(userInfo): Promise<void>

接口入参: userInfo

字段类型必填说明
namestring用户昵称(区分与 登录用户名 username)
usernamestring用户名称
picturestring用户上传头像
phone_numberstring用户绑定手机号
emailstring用户绑定邮箱
genderstring性别,取值仅限于 MALE、FEMALE、UNKNOWN
birthdatestring用户生日

接口出参: 无

示例代码

const user = auth.currentUser;

user
.update({
gender: "MALE", // 性别,取值仅限于 MALE、FEMALE、UNKNOWN
})
.then(() => {
// 更新用户信息成功
});

User.refresh()

接口描述

接口功能:刷新本地用户信息。当用户在其他客户端更新用户信息之后,可以调用此接口同步更新之后的信息。

接口声明:refresh(): Promise<UserInfo>

接口入参: 无

接口出参: UserInfo

字段类型说明
substring用户唯一标识)
namestring用户昵称(区分与 登录用户名 username)
usernamestring用户名称
picturestring用户上传头像
phone_numberstring用户绑定手机号
emailstring用户绑定邮箱
email_verifiedboolean用户是否经过邮箱验证
groupsArray<{id: string; expires_at?: string}>用户所属组/角色列表(字符串数组)
genderstring性别
birthdatestring用户生日
localestring用户设置语言
zoneinfostring时区
providersArray<UserProfileProvider>第三方平台配置

示例代码

const user = auth.currentUser;

user.refresh().then((userInfo) => {
// 刷新用户信息成功
});

错误码

登录错误

错误码说明
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 分钟生效

验证码相关处理

error==captcha_required 或 error==captcha_invalid 表示请求触发了验证码相关逻辑。需要进行机器验证。

验证码流程完成后,若业务接口返回 error 等于 captcha_required,表示请求需要 captcha_token 参数,尽可能使用本地的未过期的验证码。当 error 等于 captcha_invalid 时,表示验证码无效,需要需要重新获取验证码。在同一个验证流程内,captcha_invalid 最多尝试一次即可。

如需使用 adapter 进行处理,请参考adapter 的验证码处理指南

初始化验证码

curl -X POST "https://${env}.ap-shanghai.tcb-api.tencentcloudapi.com/auth/v1/captcha/init" \
-H "Content-Type:application/json" \
-u ${clientID}:${clientSecrect}
-d \
'{
"redirect_uri": "https://example.com/callback",
"state": "your_state string"
}'
请求参数

redirect_uri: (必传) 验证码验证完成后的地址。 state: (必传) 系统状态字符串,该字符串在验证码验证完成后后将 state 携带到。

响应 1:状态码 200 且返回 url 字段非空,需要展示验证码并完成验证

如果用户请求比较频繁或存在其他风险,验证码服务会返回下面的形式。

{
"url": "https://exmaple.com/captcha.html",
"expires_in": 600
}

此时表示,用户行为需要经过验证码验证才可以通过,请求成功后,客户端通过浏览器或 webview/iframe 等 打开 url 地址,比如上面的https://exmaple.com/captcha.html 用户在 web 中处理完成后,会自动重定向到下面的地址:(其中 captcha_token 为验证码 token,expires_in 为过期时间,单位为秒), https://example.com/callback?state=xxxxx&captcha_token=hbGciOiJeyJhbGciOiJSUAeyJhbGciOiJ&expires_in=600

业务方需要监听 redirect_uri 的地址变化,当地址为 appanme://com.package.name/callback 时,比对 state 是否和传入的相同,并获取到 captcha_token 和 expires_in。

若验证过程发生错误,验证页面会展示错误信息,用户点击返回后,验证页面会将错误信息 error 和 error_description 拼接到 redirect_uri 后重定向,例如:

https://example.com/callback?state=xxxxx&error=xxx&error_description=xxx

此时业务方可以根据需要恢复初始页或做其它处理。

响应 2:状态码非 200,需要进行错误处理

如果用户请求比较频繁或存在其他风险,验证码服务会返回下面的形式。

{
"error": "resource_exhausted",
"error_description": "Your operation is too frequent, please try again later"
}

此时客户端需要展示 error_descriprion, 可以结合 i18n 展示进行多语言展示。

拿到 captcha_token 再次请求

拿到 captcha_token 后,将 captcha_token 放到 url 参数中进行请求;

比如,请求 /v1/example 返回 captcha_invalid 错误,此时,则需要再次请求 /v1/example?captcha_token=hbGciOiJeyJhbGciOiJSUAeyJhbGciOiJ 即可完成操作。

类型定义

User

User 对象是当前用户信息的抽象

属性类型说明
uidstring | undefined用户唯一标识
genderstring | undefined性别
picturestring | undefined头像 URL
emailstring | undefined​ 邮箱
emailVerifiedboolean | undefined​ 邮箱是否已验证
phoneNumberstring | undefined手机号
usernamestring | undefined用户名称
namestring | undefined用户昵称
providersArray<{ id?: string; providerUserId?: string; name?: string }> | undefined第三方登录绑定列表
birthdatestring | undefined出生日期
substring | undefined身份主体标识(JWT sub)

Credentials

Credentials 对象定义了用于身份认证与授权的凭据信息结构

属性类型说明
token_typestring | null令牌类型,常见值为 Bearer​ 等,用于指示令牌的认证方案
access_tokenstring | null访问令牌,用于调用受保护资源的身份凭证
refresh_tokenstring | null刷新令牌,用于在访问令牌过期后获取新的访问令牌
scopestring | null权限范围,通常为空格分隔的字符串(如 "openid profile email")
expires_innumber | null访问令牌的有效期,单位为秒
expires_atDate | null访问令牌的过期时间点
substring | null用户唯一标识
groupsstring[] | null用户所属组/角色列表(字符串数组)
versionstring凭据的版本号或来源标识

LoginState

LoginState 对象是对用户当前的登录态的抽象

属性类型说明
userUserUser 对象
oauthLoginStateCredentials | nullCredentials 对象