用户鉴权
鉴权是指在用户访问你的系统前,对其进行身份校验。用户在使用声网服务,如加入音视频通话或登录信令系统时,声网使用 Token 对其鉴权。
基于不同的传输连接,RTM SDK 提供的功能可以被划分为两种服务类型: MESSAGE 服务和 STREAM 服务。这两种服务使用的 Token 是不同的,更新 Token 的方法也不同。其中:
MESSAGE服务:使用 RTM 实例下的renewToken()方法更新 token,为Message Channel、User Channel、Presence、Storage、Lock等特性提供鉴权服务。STREAM服务: 使用streamChannel实例下的renewToken()方法更新 Token,为Stream Channel、Topic等功能特性提供鉴权服务。
这两种服务都会通过 token 事件返回 Token 即将过期通知。你可以通过监听此事件实现 Token 自动续期的业务逻辑。Token 的有效期最长为 24 小时,声网推荐你在 Token 过期前更新 Token。本文介绍如何更新 Token。
想要了解生成和使用 Token 的更多信息,可以查看:
用户鉴权
renewToken
接口描述
为保证及时更新 Token,声网推荐你监听 token 回调,详见事件监听。成功添加事件监听后,当 Token 还有 30 秒过期时,SDK 会触发 token 回调,提醒用户及时更新。
- 通过调用
rtmClient.renewToken(token: string)为MESSAGE服务更新 Token。 - 通过调用
streamChannel.renewToken(token: string)为STREAM服务更新 Token。
接口方法
你可以通过以下方式调用 renewToken 方法:
TypeScript
async renewToken(token: string): Promise<RenewTokenResponse>
| 参数 | 类型 | 是否必填 | 默认值 | 描述 |
|---|---|---|---|---|
token | string | 必填 | - | 根据使用的服务类型,在该参数中填入对应 Token。
|
基本用法
TypeScript
import { RtmClient, RtmError } from '@shengwang/rtm-full';
import type { TokenEvent } from '@shengwang/rtm-full';
// 定义获取 token 函数
async function fetchToken(channelName?: string): Promise<string> {
// 向 Token Provider 请求 Token
// ...
return 'your_token_here';
}
// 监听 token 事件,更新 Token
rtmClient.addEventListener('token', async (event: object) => {
const tokenEvent = event as TokenEvent;
const token = await fetchToken();
try {
await rtmClient.renewToken(token);
console.log('MESSAGE service token renewed successfully');
} catch (error) {
if (error instanceof RtmError) {
console.error('Failed to renew MESSAGE token:', error.errorCode, error.reason);
}
}
});
返回值
该方法返回一个 Promise,成功时 resolve 并返回 RenewTokenResponse 对象,失败时 reject 并抛出 RtmError 异常。
RenewTokenResponse 数据结构如下:
| 属性 | 类型 | 描述 |
|---|---|---|
timestamp | number | 操作的时间戳(保留字段,供未来使用)。 |