CloudBase 提供跨平台的登录鉴权功能,您可以基于此为自己的应用构建用户体系,包括但不限于:
同时,CloudBase 登录鉴权还是保护您的服务资源的重要手段,CloudBase 对用户端发来的每一个请求,都会进行身份和权限的检查,避免您的资源被恶意攻击者消耗或者盗用。
云开发 CloudBase 提供以下登录鉴权方式供不同的用户场景使用:
登录类型 | 场景 |
---|---|
匿名登录 | 用户以临时的匿名身份登录云开发,无需注册。 |
邮箱登录 | 用户使用自己的邮箱+密码登录。 |
微信授权登录 | 1、经微信公众平台授权的公众号网页; 2、经微信开放平台用授权的网站。 |
自定义登录 | 开发者可以完全接管登录流程,例如与自有的账号体系打通、自定义登录逻辑等。 |
用户名密码登录 | 用户使用自己的用户名+密码登录。 |
微信小程序登录 | 已开通云开发的微信小程序初始化后便同步完成登录鉴权,无需额外操作。 |
短信验证码登录 | 用户使用自己的手机号+验证码登录。 |
每个登录 CloudBase 的用户,都有一个对应的 CloudBase 账号,用户通过此账号访问调用 CloudBase 的数据与资源。
每个账号都有全局唯一的 UID,即账号 ID,作为用户的唯一身份标识。
每个账号可以添加、修改用户信息,请参考 管理用户。
每个账号除了最初的登录方式之外,还可以关联其它登录方式,请参考 账户关联。
您可以指定登录状态如何持久保留。默认为 session
,相关选项包括:
值 | 说明 |
---|---|
session | 在 SessionStorage 中保留登录状态,当前页面关闭后会被清除。 |
local | 在本地存储中长期地保留登录状态。 |
none | 在内存中保留登录状态,当前页面刷新、重定向之后会被清除。 |
例如,对于网页应用,最佳选择是 local
,即在用户关闭浏览器之后仍保留该用户的会话。这样,用户不需要每次访问该网页时重复登录,避免给用户带来诸多不便体验。
用户登录 CloudBase 之后,会获得访问令牌(Access Token) 作为访问 CloudBase 的凭证,访问令牌默认具有两小时有效期。
登录时还会获得刷新令牌(Refresh Token),默认有效期 30 天,用于访问令牌过期后,获取新的访问令牌。
CloudBase 用户端 SDK 会自动维护令牌的刷新和有效期,开发者无需特别关注此流程。
开发者可以调用以下登录方式,登录或者创建一个用户:
获取当前用户,推荐在 Auth
对象上设置一个回调函数,每当用户登录状态转变时,会触发这个回调函数,并且获得当前的 LoginState
:
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
属性来获取当前登录的用户。如果用户未登录,则 currentUser
为 null
:
const user = auth.currentUser;
if (user) {
// 此时用户已经登录
} else {
// 没有登录
}
您可以通过 User
对象的各个属性来获取用户的个人资料信息:
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
方法来更新用户的个人资料信息。例如:
const user = auth.currentUser;
user
.update({
nickName: "Tony Stark",
gender: "MALE",
avatarUrl: "https://..."
})
.then(() => {
// 更新用户资料成功
});
对于一个多端应用,用户可能在其中某个端上更新过自己的个人资料信息,此时其它端上可能需要刷新信息:
const user = auth.currentUser;
// 刷新用户信息
user.refresh().then(() => {
// 刷新后,获取到的用户信息即为最新的信息
const { nickName, gender, avatarUrl } = user;
});
执行登录流程之前,我们非常建议您先判断用户端是否已经登录 CloudBase,如已经登录,那么不需要执行登录流程,以避免无意义的重复登录。
const auth = app.auth();
// 应用初始化时
if (auth.hasLoginState()) {
// 此时已经登录
} else {
// 此时未登录,执行您的登录流程
}
您可以指定登录状态如何持久保留。默认为 session
,相关选项包括:
值 | 说明 |
---|---|
session | 在 SessionStorage 中保留登录状态,当前页面关闭后会被清除。 |
local | 在本地存储中长期地保留登录状态。 |
none | 在内存中保留登录状态,当前页面刷新、重定向之后会被清除。 |
例如,对于网页应用,最佳选择是 local
,即在用户关闭浏览器之后仍保留该用户的会话。这样,用户不需要每次访问该网页时重复登录,避免给用户带来诸多不便体验。
const auth = app.auth({
persistence: "local"
});
如果用户在匿名状态下产生了一些私有数据(例如游戏中获取了个人成就和装备),想将此匿名账号转化为正式账号长久持有。
针对这种需求,您可以 将匿名账号与任意一种登录方式关联,关联后,便可以永久使用该种登录方式登录 CloudBase,达成”匿名账号转正“的效果。详情请参见 账户关联。
从应用开发者的角度来讲:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。