跳到主要内容

匿名登录

CloudBase 匿名登录的所有逻辑均可由客户端代码主动执行,无需用户手动操作。在匿名登录状态下可正常的调用 CloudBase 的资源,开发者同时可以配合安全规则针对匿名用户制定对应的访问限制。

版本说明
  • 登录鉴权(v2) 适用于 @cloudbase/js-sdk@2.x 版本
  • 如您使用的 SDK 版本为 1.x,请参考 登录鉴权(v1)
  • v2 版本暂不支持公众号登录方式,如需使用该方式,请用 v1 版本

本文将以 V2 版本进行介绍

前置动作

开启匿名登录

  1. 前往 云开发/身份认证
  2. 在登录方式列表中,选择 匿名登录 方式,点击开启

登录流程

auth 实例请参考 SDK 初始化

Auth.signInAnonymously 用于匿名登录

await auth.signInAnonymously();
const loginScope = await auth.loginScope();
// 如为匿名登录,则输出 true
console.log(loginScope === "anonymous");

数量限制

每个 CloudBase 环境的匿名用户数量不超过 1000 万个

权限控制

匿名用户在安全规则中的 auth.loginType 值为 ANONYMOUS ,配合安全规则可以限制匿名用户的 云数据库云存储 的访问权限。比如下述代码展示的安全规则为:

  • 云数据库匿名用户不可读写;
  • 云存储所有用户可读,匿名用户不可写。
{
"read": "auth.loginType != 'ANONYMOUS'",
"write": "auth.loginType != 'ANONYMOUS'"
}
提示

转化为正式用户

如果用户在匿名状态下产生了一些私有数据(例如游戏中获取了个人成就和装备),想将此匿名账号转化为正式账号长久持有。

针对这种需求,您可以进行匿名用户转正注册,即可将此匿名账号的私有数据转移到正式账号中。

转正示例参考:

  1. 匿名登录
const auth = app.auth();
await auth.signInAnonymously();
  1. 进行某种方式的登录

  2. 获取 access_token 并进行转正注册

const {
accessToken
} = await auth.getAccessToken();

await auth.signUp({
// 其他参数参考 auth.signUp
anonymous_token: access_token,
});
提示

另外可参考:账户关联

常见问题

  • 匿名登录与未登录有什么区别?

    从 C 端用户的角度来讲:

    • 匿名登录和未登录在上手使用上没有任何区别,都无需注册;
    • 匿名登录用户有独立的用户标识,在同设备有效期内,用户可以产生独立的私有数据;
    • 与未登录相比,匿名登录可以转为正式用户,匿名登录期间的私有数据会自动继承到正式用户名下。

    从应用开发者的角度来讲:

    • CloudBase 匿名登录产生的匿名用户本质上是一个有效用户,拥有唯一的用户 ID。从而可以为其创建私有的 云数据库云存储 数据,以及配合 安全规则 制定个性化的访问策略;
    • 未登录模式是纯粹的无登录态访问,该模式下的访问都不会进入用户的追踪统计;
    • 未登录的用户默认权限下无法使用任何 CloudBase 的服务和资源,而匿名登录在基础权限下也可以进行对应的资源读写,也可以结合安全规则实现更细粒度的管控。
  • 匿名登录的用户达到上限后怎么办?

    CloudBase 限制每个环境的匿名用户数量不超过 1000 万个,如果达到上限可以在 CloudBase 控制台 的“用户管理”页面查看匿名用户的活跃情况,针对长期不登录的匿名用户可以考虑将其删除以释放空间。

  • 匿名用户是否会过期?

    CloudBase 对匿名用户的有效期限策略是:每个设备同时只存在一个匿名用户,并且此用户永不过期。当然,如果用户手动清除了设备或浏览器的本地数据,那么匿名用户的数据便会被同步清除,再次调用 CloudBase 匿名登录 API 会产生一个新的匿名用户。