@blocklet/js-sdk 旨在通过自动处理基于令牌的复杂安全性,实现无缝的身份验证。它在后台管理会话令牌和刷新令牌,让您可以专注于构建应用程序的功能。
本指南解释了自动令牌续订过程,并演示了如何使用 AuthService 管理用户身份验证状态,例如获取个人资料和注销。有关所有可用方法的详细列表,请参阅 AuthService API 参考。
自动会话令牌续订
SDK 采用标准且安全的身份验证流程,使用短期的会话令牌和长期的刷新令牌。当您使用 SDK 的请求辅助工具(请参阅发起 API 请求)进行 API 调用时,该过程是完全自动化的:
请求发起
SDK 将当前的
sessionToken附加到 API 请求的授权标头中。令牌过期
如果
sessionToken已过期,服务器将响应401 Unauthorized错误。自动刷新
SDK 的请求拦截器会捕获此
401错误。然后,它会自动将存储的refreshToken发送到身份验证端点,以获取新的sessionToken和refreshToken。请求重试
一旦接收并存储了新令牌,SDK 会透明地重试失败的原始 API 请求。这次将使用新的、有效的
sessionToken。成功响应
服务器验证新令牌并返回成功响应,然后该响应将传递回您的应用程序代码。
整个过程对您的应用程序逻辑是不可见的,确保用户会话保持活动状态,而不会中断用户体验。
下图说明了此流程:

使用 AuthService 管理用户状态
AuthService 为常见的身份验证和用户管理任务提供了一个高级 API。您可以通过主 SDK 实例访问它。
获取当前用户的个人资料
要获取当前登录用户的个人资料信息,请使用 getProfile 方法。
获取用户个人资料
import { getBlockletSDK } from '@blocklet/js-sdk';
const sdk = getBlockletSDK();
async function fetchUserProfile() {
try {
const profile = await sdk.auth.getProfile();
console.log('用户个人资料:', profile);
return profile;
} catch (error) {
console.error('获取个人资料失败:', error);
}
}
fetchUserProfile();注销
logout 方法会使用户在服务器上的当前会话失效。您可以不带参数调用它以注销当前设备,或者传递一个 visitorId 来注销特定会话,这对于管理跨多个设备的会话非常有用。
注销用户
import { getBlockletSDK } from '@blocklet/js-sdk';
const sdk = getBlockletSDK();
async function handleLogout() {
try {
// 注销当前会话
await sdk.auth.logout();
console.log('成功注销。');
// 重定向到登录页面或更新 UI 状态
} catch (error) {
console.error('注销失败:', error);
}
}删除用户账户
对于希望删除其账户的用户,SDK 提供了 destroyMyself 方法。这是一个破坏性且不可逆的操作,会永久删除用户的数据。
删除当前用户的账户
import { getBlockletSDK } from '@blocklet/js-sdk';
const sdk = getBlockletSDK();
async function deleteAccount() {
// 与用户确认此操作至关重要
if (window.confirm('您确定要删除您的账户吗?此操作不可逆。')) {
try {
const result = await sdk.auth.destroyMyself();
console.log(`DID 为 ${result.did} 的账户已被删除。`);
// 执行清理并重定向用户
} catch (error) {
console.error('删除账户失败:', error);
}
}
}后续步骤
现在您已经了解了 @blocklet/js-sdk 中的身份验证工作原理,您可能希望探索如何管理用户的所有活动会话。