前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >TCB系列学习文章——云开发登录篇(九)

TCB系列学习文章——云开发登录篇(九)

原创
作者头像
F颜
修改2021-06-14 00:03:39
1.9K0
修改2021-06-14 00:03:39
举报

概述

CloudBase 提供跨平台的登录鉴权功能,您可以基于此为自己的应用构建用户体系,包括但不限于:

  • 为用户分配全局唯一的身份标识 uid;
  • 储存和管理用户个人信息;
  • 关联多种登录方式;
  • 管理用户对数据、资源的访问权限;
  • 用户行为的收集和分析。

同时,CloudBase 登录鉴权还是保护您的服务资源的重要手段,CloudBase 对用户端发来的每一个请求,都会进行身份和权限的检查,避免您的资源被恶意攻击者消耗或者盗用。

登录鉴权方式

云开发 CloudBase 提供以下登录鉴权方式供不同的用户场景使用:

登录类型

场景

匿名登录

用户以临时的匿名身份登录云开发,无需注册。

邮箱登录

用户使用自己的邮箱+密码登录。

微信授权登录

1、经微信公众平台授权的公众号网页; 2、经微信开放平台用授权的网站。

自定义登录

开发者可以完全接管登录流程,例如与自有的账号体系打通、自定义登录逻辑等。

用户名密码登录

用户使用自己的用户名+密码登录。

微信小程序登录

已开通云开发的微信小程序初始化后便同步完成登录鉴权,无需额外操作。

短信验证码登录

用户使用自己的手机号+验证码登录。

CloudBase 用户

每个登录 CloudBase 的用户,都有一个对应的 CloudBase 账号,用户通过此账号访问调用 CloudBase 的数据与资源。

UID

每个账号都有全局唯一的 UID,即账号 ID,作为用户的唯一身份标识。

用户信息

每个账号可以添加、修改用户信息,请参考 管理用户

登录方式

每个账号除了最初的登录方式之外,还可以关联其它登录方式,请参考 账户关联

登录状态的持久化

您可以指定登录状态如何持久保留。默认为 session,相关选项包括:

说明

session

在 SessionStorage 中保留登录状态,当前页面关闭后会被清除。

local

在本地存储中长期地保留登录状态。

none

在内存中保留登录状态,当前页面刷新、重定向之后会被清除。

例如,对于网页应用,最佳选择是 local,即在用户关闭浏览器之后仍保留该用户的会话。这样,用户不需要每次访问该网页时重复登录,避免给用户带来诸多不便体验。

访问令牌与刷新令牌

用户登录 CloudBase 之后,会获得访问令牌(Access Token) 作为访问 CloudBase 的凭证,访问令牌默认具有两小时有效期

登录时还会获得刷新令牌(Refresh Token)默认有效期 30 天,用于访问令牌过期后,获取新的访问令牌。

CloudBase 用户端 SDK 会自动维护令牌的刷新和有效期,开发者无需特别关注此流程。

管理用户

创建用户

开发者可以调用以下登录方式,登录或者创建一个用户:

获取当前登录的用户

订阅登录状态变化的回调函数

获取当前用户,推荐在 Auth 对象上设置一个回调函数,每当用户登录状态转变时,会触发这个回调函数,并且获得当前的 LoginState

代码语言:javascript
复制
import cloudbase from "@cloudbase/js-sdk";

const app = cloudbase.init({
  env: "your-env-id"
});
const auth = app.auth();

// 设置一个观察者
auth.onLoginStateChanged((loginState) => {
  if (loginState) {
    // 此时用户已经登录
  } else {
    // 没有登录
  }
});

直接获取当前用户

您还可以使用 Auth.currentUser 属性来获取当前登录的用户。如果用户未登录,则 currentUsernull

代码语言:javascript
复制
const user = auth.currentUser;

if (user) {
  // 此时用户已经登录
} else {
  // 没有登录
}

获取用户个人资料

您可以通过 User 对象的各个属性来获取用户的个人资料信息:

代码语言:javascript
复制
const user = auth.currentUser;
let uid, nickName, gender, avatarUrl, location;

if (user) {
  // 云开发唯一用户 id
  uid = user.uid;

  // 昵称
  nickName = user.nickName;

  // 性别
  gender = user.gender;

  // 头像URL
  avatarUrl = user.avatarUrl;

  // 用户地理位置
  location = user.location;
}

更新用户个人资料

您可以使用 User.update 方法来更新用户的个人资料信息。例如:

代码语言:javascript
复制
const user = auth.currentUser;

user
  .update({
    nickName: "Tony Stark",
    gender: "MALE",
    avatarUrl: "https://..."
  })
  .then(() => {
    // 更新用户资料成功
  });

刷新用户资料信息

对于一个多端应用,用户可能在其中某个端上更新过自己的个人资料信息,此时其它端上可能需要刷新信息:

代码语言:javascript
复制
const user = auth.currentUser;

// 刷新用户信息
user.refresh().then(() => {
  // 刷新后,获取到的用户信息即为最新的信息
  const { nickName, gender, avatarUrl } = user;
});

最佳实践

避免重复登录

执行登录流程之前,我们非常建议您先判断用户端是否已经登录 CloudBase,如已经登录,那么不需要执行登录流程,以避免无意义的重复登录

代码语言:javascript
复制
const auth = app.auth();

// 应用初始化时
if (auth.hasLoginState()) {
  // 此时已经登录
} else {
  // 此时未登录,执行您的登录流程
}

登录状态的持久保留

您可以指定登录状态如何持久保留。默认为 session,相关选项包括:

说明

session

在 SessionStorage 中保留登录状态,当前页面关闭后会被清除。

local

在本地存储中长期地保留登录状态。

none

在内存中保留登录状态,当前页面刷新、重定向之后会被清除。

例如,对于网页应用,最佳选择是 local,即在用户关闭浏览器之后仍保留该用户的会话。这样,用户不需要每次访问该网页时重复登录,避免给用户带来诸多不便体验。

代码语言:javascript
复制
const auth = app.auth({
  persistence: "local"
});

转化为正式用户

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

针对这种需求,您可以 将匿名账号与任意一种登录方式关联,关联后,便可以永久使用该种登录方式登录 CloudBase,达成”匿名账号转正“的效果。详情请参见 账户关联

常见问题

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

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

    • CloudBase 匿名登录产生的匿名用户本质上是一个有效用户,拥有唯一的用户 ID。从而可以为其创建私有的 云数据库云存储 数据,以及配合 安全规则 制定个性化的访问策略;
    • 未登录模式是纯粹的无登录态访问,该模式下的访问都不会进入用户的追踪统计;
    • 未登录的用户默认权限下无法使用任何 CloudBase 的服务和资源,而匿名登录在基础权限下也可以进行对应的资源读写,也可以结合安全规则实现更细粒度的管控。
  • 匿名登录的用户达到上限后怎么办? CloudBase 限制每个环境的匿名用户数量不超过 1000 万个,如果达到上限可以在 CloudBase 控制台 的“用户管理”页面查看匿名用户的活跃情况,针对长期不登录的匿名用户可以考虑将其删除以释放空间。
  • 匿名用户是否会过期? CloudBase 对匿名用户的有效期限策略是:每个设备同时只存在一个匿名用户,并且此用户永不过期。当然,如果用户手动清除了设备或浏览器的本地数据,那么匿名用户的数据便会被同步清除,再次调用 CloudBase 匿名登录 API 会产生一个新的匿名用户。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述
    • 登录鉴权方式
      • CloudBase 用户
        • UID
        • 用户信息
        • 登录方式
      • 登录状态的持久化
        • 访问令牌与刷新令牌
        • 管理用户
          • 创建用户
            • 获取当前登录的用户
              • 订阅登录状态变化的回调函数
              • 直接获取当前用户
            • 获取用户个人资料
              • 更新用户个人资料
                • 刷新用户资料信息
                • 最佳实践
                  • 避免重复登录
                    • 登录状态的持久保留
                      • 转化为正式用户
                        • 常见问题
                        相关产品与服务
                        云开发 CloudBase
                        云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
                        领券
                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档