跳到主要内容

快速入门

本指南将引导你完成使用 @arcblock/did-connect-react 将去中心化身份(DID)验证集成到你的 React 应用中的基本步骤。只需几分钟,你就能拥有一个功能齐全的登录和登出流程。

前提条件

在开始之前,请确保你的开发环境满足以下条件:

  • 你已建立一个 React 项目。
  • 你有一个正在运行的 Blocklet Server 实例,用于处理验证请求。该库旨在与由 Blocklet Server 提供支持的后端无缝协作。

第 1 步:安装库

首先,将 @arcblock/did-connect-react 包添加到你的项目中。你可以使用 npm 或 yarn。

Install with npm

bash
npm install @arcblock/did-connect-react

Install with yarn

bash
yarn add @arcblock/did-connect-react

第 2 步:设置 SessionProvider

SessionProvider 是该库的核心。它是一个上下文提供程序,用于管理用户的会话状态(如登录状态和用户信息),并使其对所有包裹在其中的组件可用。你应该将其放置在应用的根部,例如,在你的 App.js 文件中。

对于基于 Blocklet 构建的应用,推荐的初始化提供程序的方法是使用 createAuthServiceSessionContext 工厂函数。

App.js

javascript
import React from 'react';
import { createAuthServiceSessionContext } from '@arcblock/did-connect-react/lib/Session';
import Home from './Home'; // 我们将在下一步创建此组件

// createAuthServiceSessionContext 针对 Blocklet 环境进行了优化
const { SessionProvider } = createAuthServiceSessionContext();

function App() {
  return (
    // serviceHost prop 指向后端验证服务的基础路径。
    // 对于标准 Blocklet,这通常是 blocklet 的前缀或“/”。
    <SessionProvider serviceHost="/">
      <Home />
    </SessionProvider>
  );
}

export default App;

第 3 步:实现登录和登出

现在,让我们创建一个允许用户登录和登出的组件。我们可以使用 React 的 useContext 钩子和 SessionContext 来访问会话数据和函数。

session 对象为你提供了所需的一切:当前的 userloading 状态,以及像 login()logout() 这样的函数。

Home.js

javascript
import React, { useContext } from 'react';
import { SessionContext } from '@arcblock/did-connect-react/lib/Session';
import ConnectButton from '@arcblock/did-connect-react/lib/Button';
import Button from '@arcblock/ux/lib/Button'; // 一个通用按钮
import CircularProgress from '@mui/material/CircularProgress';

function Home() {
  // 访问会话上下文
  const { session } = useContext(SessionContext);

  // 解构以便更轻松地访问
  const { user, loading, login, logout } = session;

  // 在会话初始化期间显示加载指示器
  if (loading) {
    return <CircularProgress />;
  }

  return (
    <div style={{ padding: '20px', textAlign: 'center' }}>
      {user ? (
        // 如果用户已登录,则显示其 DID 和登出按钮
        <div>
          <h1>Welcome!</h1>
          <p>Your DID: {user.did}</p>
          <Button variant="contained" color="secondary" onClick={logout}>
            Logout
          </Button>
        </div>
      ) : (
        // 如果未登录,则显示登录按钮
        <div>
          <h1>Please Sign In</h1>
          <ConnectButton onClick={() => login()}>
            Connect Wallet
          </ConnectButton>
        </div>
      )}
    </div>
  );
}

export default Home;

当用户点击 ConnectButton 时,login() 函数被调用。该函数负责打开 DID Connect 弹窗,显示一个二维码供用户使用其 DID 钱包扫描,并管理整个验证过程。

第 4 步:访问用户数据

用户成功登录后,session.user 对象将被填充。该对象包含从用户 DID 钱包中检索到的用户个人资料信息。

由上下文提供的 session 对象是你与用户验证状态交互的主要接口。以下是其关键属性:

  • user object | null — 已验证的用户对象。如果没有用户登录,则为 null
    • did string — 用户的去中心化身份标识(DID)。
    • fullName string — 来自用户钱包个人资料的全名。
    • email string — 来自用户钱包个人资料的电子邮件。
  • loading boolean — 在会话初始化或刷新期间为 true,否则为 false
  • login function — 一个启动登录过程的函数,它会打开 DID Connect UI。
  • logout function — 一个用于登出用户并清除会话的函数。
  • initialized boolean — 初始会话检查完成后为 true

你已准备就绪!

恭喜!你已成功在你的 React 应用中实现了一个完整的基于 DID 的验证流程。用户现在可以使用他们的 DID 钱包登录,并且你的应用可以安全地访问他们的会话信息。

后续步骤

要深入了解并探索更多高级功能,请查看以下部分: