跳到主要内容

身份验证

@blocklet/js-sdk 旨在通过自动处理基于令牌的复杂安全性,实现无缝的身份验证。它在后台管理会话令牌和刷新令牌,让您可以专注于构建应用程序的功能。

本指南解释了自动令牌续订过程,并演示了如何使用 AuthService 管理用户身份验证状态,例如获取个人资料和注销。有关所有可用方法的详细列表,请参阅 AuthService API 参考

自动会话令牌续订

SDK 采用标准且安全的身份验证流程,使用短期的会话令牌和长期的刷新令牌。当您使用 SDK 的请求辅助工具(请参阅发起 API 请求)进行 API 调用时,该过程是完全自动化的:

  1. 请求发起

    SDK 将当前的 sessionToken 附加到 API 请求的授权标头中。

  2. 令牌过期

    如果 sessionToken 已过期,服务器将响应 401 Unauthorized 错误。

  3. 自动刷新

    SDK 的请求拦截器会捕获此 401 错误。然后,它会自动将存储的 refreshToken 发送到身份验证端点,以获取新的 sessionTokenrefreshToken

  4. 请求重试

    一旦接收并存储了新令牌,SDK 会透明地重试失败的原始 API 请求。这次将使用新的、有效的 sessionToken

  5. 成功响应

    服务器验证新令牌并返回成功响应,然后该响应将传递回您的应用程序代码。

整个过程对您的应用程序逻辑是不可见的,确保用户会话保持活动状态,而不会中断用户体验。

下图说明了此流程:

Authentication

使用 AuthService 管理用户状态

AuthService 为常见的身份验证和用户管理任务提供了一个高级 API。您可以通过主 SDK 实例访问它。

获取当前用户的个人资料

要获取当前登录用户的个人资料信息,请使用 getProfile 方法。

获取用户个人资料

javascript
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 来注销特定会话,这对于管理跨多个设备的会话非常有用。

注销用户

javascript
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 方法。这是一个破坏性且不可逆的操作,会永久删除用户的数据。

删除当前用户的账户

javascript
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 中的身份验证工作原理,您可能希望探索如何管理用户的所有活动会话。

管理用户会话

了解如何使用 UserSessionService 获取和管理用户在不同设备上的登录会话。

阅读指南