开发者可以使用自定义登录,在自己的服务器或者云函数内,为用户签发带有自定义身份 ID 的自定义登录凭证 Ticket,随后用户端 SDK 便可以使用 Ticket 登录 CloudBase。
适用场景
自定义登录一般用于以下几种场景:
开发者希望将自有的账号体系与云开发 CloudBase 账号进行一对一关联。
开发者希望自行接管鉴权流程。
步骤概览
自定义登录需要以下几个步骤:
1. 获取 CloudBase 自定义登录私钥。
2. 使用 CloudBase 服务端 SDK,通过私钥签发出 Ticket,并返回至用户端。
3. 用户端 SDK 使用 Ticket 登录 CloudBase。
步骤1:获取自定义登录私钥
私钥是一份携带有 JSON 数据的文件,请将下载或复制的私钥文件保存到您的服务器或者云函数中,假设路径为
/path/to/your/tcb_custom_login.json
。注意
私钥文件是证明管理员身份的重要凭证,请务必妥善保存,避免泄漏。
每次生成私钥文件都会使之前生成的私钥文件在 2 小时后失效。
步骤2:签发 Ticket
调用 CloudBase 服务端 SDK,在初始化时传入自定义登录私钥,随后便可以签发出 Ticket,并返回至用户端。
Node.js
const cloudbase = require("@cloudbase/node-sdk");// 1. 初始化 SDKconst app = cloudbase.init({env: "your-env-id",// 传入自定义登录私钥credentials: require("/path/to/your/tcb_custom_login.json")});// 2. 开发者自定义的用户唯一身份标识const customUserId = "your-customUserId";// 3. 创建ticketconst ticket = app.auth().createTicket(customUserId);// 4. 将ticket返回至客户端return ticket;
说明
注意
customUserId 必须满足以下需求:
4-32 位字符;
字符只能是大小写英文字母、数字、以及
_-#@(){}<>[]:.,<>+#~
中的字符。步骤3:使用 Ticket 登录 CloudBase
用户端应用获取到 Ticket 之后,便可以调用客户端 SDK 提供的
auth.signInWithTicket()
登录 CloudBase:
Web:import cloudbase from '@cloudbase/js-sdk';const app = cloudbase.init({env: 'your-env-id'});const auth = app.auth({ persistence: 'none' });async function login(){const loginState = await auth.getLoginState();// 1. 建议登录前检查当前是否已经登录if(!loginState){// 2. 请求开发者自有服务接口获取ticketconst ticket = await fetch('...');// 3. 登录 CloudBaseawait auth.customAuthProvider().signIn(ticket);}}login();
整体流程示意如下:
常见问题
自定义登录一定需要自己建设用于创建 Ticket 的服务器吗?
自定义登录必须有一个创建 Ticket 的服务,但是开发者并非一定要自己搭建服务器。