メインコンテンツへスキップ

はじめに

このガイドでは、@arcblock/did-connect-react を使用して、Reactアプリケーションに分散型ID(DID)認証を統合するための基本的な手順を説明します。わずか数分で、完全に機能するログインおよびログアウトフローを実装できます。

このガイドでは、@arcblock/did-connect-react を使用して、Reactアプリケーションに分散型ID(DID)認証を統合するための基本的な手順を説明します。わずか数分で、完全に機能するログインおよびログアウトフローを実装できます。

前提条件

開始する前に、開発環境が次の基準を満たしていることを確認してください:

  • Reactプロジェクトがセットアップされていること。
  • 認証リクエストを処理するBlocklet Serverインスタンスが実行されていること。このライブラリは、Blocklet Serverをバックエンドとしてシームレスに動作するように設計されています。

ステップ1:ライブラリをインストールする

まず、@arcblock/did-connect-react パッケージをプロジェクトに追加します。npmまたはyarnのいずれかを使用できます。

npmでインストール

bash
npm install @arcblock/did-connect-react

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プロパティは、バックエンド認証サービスのベースパスを指します。
    // 標準的な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>ようこそ!</h1>
          <p>あなたのDID: {user.did}</p>
          <Button variant="contained" color="secondary" onClick={logout}>
            ログアウト
          </Button>
        </div>
      ) : (
        // ログインしていない場合は、ログインボタンを表示
        <div>
          <h1>サインインしてください</h1>
          <ConnectButton onClick={() => login()}>
            ウォレットに接続
          </ConnectButton>
        </div>
      )}
    </div>
  );
}

export default Home;

ユーザーがConnectButtonをクリックすると、login()関数が呼び出されます。この関数は、ユーザーがDID WalletでスキャンするためのQRコードを表示するDID Connectモーダルを開き、認証プロセス全体を管理します。

ステップ4:ユーザーデータにアクセスする

ユーザーが正常にログインすると、session.userオブジェクトが入力されます。このオブジェクトには、ユーザーのDID Walletから取得したプロファイル情報が含まれています。

コンテキストによって提供される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 Walletを使用してサインインでき、アプリケーションは安全にセッション情報にアクセスできます。

次のステップ

さらに深く掘り下げ、より高度な機能を探求するには、次のセクションをご覧ください: