匿名登录

最近更新时间:2020-05-12 16:50:06

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

开通流程

控制台开启匿名登录和配置域名

开启匿名登录

在 Cloudbase 控制台 ,单击需配置的环境,在【环境设置】> 登录方式 下启用 匿名登录

添加安全域名

Web应用需要将域名添加到 Cloudbase 控制台 对应环境的【环境设置】> 安全配置 下的 WEB安全域名 列表中,否则将被识别为非法来源:

客户端 SDK 匿名登录

说明:

tcb-js-sdk 1.3.5及以上版本支持匿名登录。

Web 端

import tcb from 'tcb-js-sdk';

const app = tcb.init({
  env: 'xxxx-yyy';
});

const auth = app.auth();

async function login(){
  await auth.signInAnonymously();
  // 匿名登录成功检测登录状态isAnonymous字段为true
  const loginState = await auth.getLoginState();
  console.log(loginState.isAnonymous); // true
}

login();

Flutter 端

import 'package:CloudBase_core/CloudBase_core.dart';
import 'package:CloudBase_auth/CloudBase_auth.dart';

// 初始化
CloudBaseCore core = CloudBaseCore.init({
    'env': 'xxx'
});

// 获取登录对象
CloudBaseAuth auth = CloudBaseAuth(core);

// 获取登录状态
CloudBaseAuthState authState = await auth.getAuthState();

// 唤起匿名登录
if (authState == null) {
    await auth.signInAnonymously().then((success) {
        // 登录成功
    })catchError((err) {
        // 登录失败
    });
}

数量限制

Cloudbase 对匿名用户数量的限制规则为:每个环境不超过1000万个。

安全规则

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

  • 云数据库匿名用户不可读写。
  • 云存储所有用户可读,匿名用户不可写。

详细请查看安全规则 - 编写安全规则
云数据库:

{
  "read": "auth.loginType != ANONYMOUS",
  "write": "auth.loginType != ANONYMOUS"
}

云存储:

{
  "read": "auth != null",
  "write": "auth.loginType != ANONYMOUS"
}

转化为正式用户

C 端用户在匿名状态下体验应用程序过程中如果产生了一些私有数据(如游戏中获取了个人成就和装备),如果想将此匿名账号转化为正式账号长久持有,Cloudbase 提供匿名转正功能以支撑此类需求。

说明:

目前仅支持匿名用户转为使用自定义登录方式的用户。

转化为自定义登录用户

将匿名用户转化为自定义登录用户的流程如下:

  1. 首先需要按照 自定义登录 的流程搭建获取自定义登录凭证 ticket 的服务;
  2. C 端用户需要先在开发者自有账号体系内注册一个账号以生成唯一的用户 ID-customUserId;
  3. 开发者服务器将上一步生成的 customUserId 与 Cloudbase 自定义登录私钥计算为 Cloudbase 自定义登录凭证 ticket,并将此 ticket 返回客户端。请注意,此 ticket 必须未注册过 CloudBase,换句话说,匿名用户只能转化为新的 Cloudbase 用户;
  4. 客户端调用 auth.linkAndRetrieveDataWithTicket API,如下:
import tcb from 'tcb-js-sdk';

const app = tcb.init({
  env: 'xxxx-yyy'
});

const auth = app.auth();

async function retrieve (){
  // 1. 请求自身服务获取ticket
  const ticket = await getTicketFromSelfService();
  // 2. 调用 Cloudbase 匿名转正接口
  await auth.linkAndRetrieveDataWithTicket(ticket);
}

retrieve();

整体流程示意如下:

常见问题

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

从 C 端用户的角度:

  • 匿名登录和未登录在上手使用上没有任何区别,都无需注册。
  • 未登录场景下无法产生私有数据,所有的临时数据均保存在设备本地,如果用户换一台设备则无法继承之前的数据。

从应用开发者的角度:

  • Cloudbase 匿名登录产生的匿名用户本质上是一个有效用户,拥有唯一的用户ID。从而可以为其创建私有的 云数据库云存储,以及配合 安全规则 制定个性化的访问策略。
  • 未登录的用户无法使用任何 Cloudbase 的服务和资源。同时由于无法界定未登录用户的唯一性,在开发者自身的服务体系下也无法创建私有数据和个性化策略。

匿名登录的用户达到上限后怎么办?

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

匿名用户是否会过期?

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

目录