このガイドでは、@arcblock/did-connect-react を使用して、Reactアプリケーションに分散型ID(DID)認証を統合するための基本的な手順を説明します。わずか数分で、完全に機能するログインおよびログアウトフローを実装できます。
前提条件
開始する前に、開発環境が次の基準を満たしていることを確認してください:
- Reactプロジェクトがセットアップされていること。
- 認証リクエストを処理するBlocklet Serverインスタンスが実行されていること。このライブラリは、Blocklet Serverをバックエンドとしてシームレスに動作するように設計されています。
ステップ1:ライブラリをインストールする
まず、@arcblock/did-connect-react パッケージをプロジェクトに追加します。npmまたはyarnのいずれかを使用できます。
npmでインストール
npm install @arcblock/did-connect-reactyarnでインストール
yarn add @arcblock/did-connect-reactステップ2:SessionProviderをセットアップする
SessionProviderはライブラリの中心です。これは、ユーザーのセッション状態(ログイン状態やユーザー情報など)を管理し、その内部でラップされたすべてのコンポーネントで利用可能にするコンテキストプロバイダーです。アプリケーションのルート、例えばApp.jsファイルに配置する必要があります。
Blocklet上に構築されたアプリケーションでは、createAuthServiceSessionContextファクトリ関数を使用してプロバイダーを初期化することが推奨されます。
App.js
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オブジェクトは、現在のuser、loading状態、そしてlogin()やlogout()のような関数など、必要なものすべてを提供します。
Home.js
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— ウォレットプロファイルからのユーザーのメールアドレス。
- did
- loading
boolean— セッションが初期化または更新されている間はtrue、それ以外はfalse。 - login
function— ログインプロセスを開始する関数。DID Connect UIを開きます。 - logout
function— ユーザーをログアウトさせ、セッションをクリアする関数。 - initialized
boolean— 初期セッションチェックが完了するとtrueになります。
これで完了です!
おめでとうございます!ReactアプリケーションにDIDベースの認証フローを完全に実装しました。ユーザーはDID Walletを使用してサインインでき、アプリケーションは安全にセッション情報にアクセスできます。
次のステップ
さらに深く掘り下げ、より高度な機能を探求するには、次のセクションをご覧ください: