身份认证(旧版)
当前@cloudbase/js-sdk 版本已推出 v3 next 版本。若需使用 v3 next 版本,请参考v3 next 文档;若需使用 v1 版本,请参考v1 文档
App.auth()
接口描述
返回 Auth 对象,身份认证相关的属性和方法都在 Auth 对象中
接口声明:auth(): Auth
@cloudbase/js-sdk@2.x 版本将只支持 local 方式(Web 端在显式退出登录之前 30 天保留身份验证状态)存储身份状态。(原 1.x 版本的 session 及 none 模式不再支持)
示例代码
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_number | string | 否 | 注册所用手机号,phone_number 与 email 必须任选其一使用 |
| string | 否 | 注册所用邮箱 ,phone_number 与 email 必须任选其一使用 | |
| verification_code | string | 否 | 验证码,可通过Auth.getVerification获取 |
| verification_token | string | 否 | 验证码 token,可通过Auth.verify获取 |
| provider_token | string | 否 | 第三方 provider token,用于绑定第三方用户信息,可通过Auth.grantProviderToken获取 |
| password | string | 否 | 密码 |
| name | string | 否 | 用户名 |
| gender | string | 否 | 性别 |
| picture | string | 否 | 头像 |
| locale | string | 否 | 地址 |
| username | string | 否 | 用户名称,长度 5-24 位,支持字符中英文、数字、特殊字符(仅支持_-),不支持中文 |
接口出参: 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
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| username | string | 是 | 用户手机号,邮箱或自定义用户名,如果是中国手机号要带上“+86 ”国家码,例如“+86 138xxxxxxxxx” |
| password | string | 否 | 用户密码 ,password 与 verification_token 必须任选其一 |
| verification_token | string | 否 | 验证码 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_uri | string | 否 | 退出后的重定向页面地址 |
| state | string | 否 | 在有 redirect_uri 时,会将该参数放在 redirect_uri 的链接参数 state 中,用于区分某个身份源 |
接口出参: SignoutReponse
| 字段 | 类型 | 说明 |
|---|---|---|
| redirect_uri | string | 重定向页面地址,如果入参传了 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();
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
| 字段 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| useWxCloud | boolean | 否 | true | true: 使用微信云开发模式进行请求,需开通小程序微信云开发环境; 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
| 字段 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| phoneCode | string | 是 | 空 | 微信小程序手机号授权码,通过微信小程序手机号快速验证组件 |
接口出参: LoginState
详见 LoginState
示例代码
const app = cloudbase.init({
env: "xxxx-yyy",
region: "ap-shanghai", // 不传默认为上海地域
});
const auth = app.auth();
await auth.signInWithPhoneAuth({ phoneCode: "xxx" });
Auth.signInWithSms()
仅支持 上海 地域