@arcblock/did-connect-react 3.4.14 → 3.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/standalone/did-connect-react.css +1 -0
- package/dist/standalone/index.js +133700 -0
- package/lib/Connect/components/login-item/connect-choose-list.js +111 -111
- package/lib/Connect/components/login-item/connect-provider-list.js +180 -180
- package/lib/Connect/components/login-item/mobile-login-item.js +56 -56
- package/lib/Connect/components/login-item/passkey-login-item.js +27 -29
- package/lib/Connect/components/login-item/web-login-item.js +31 -29
- package/lib/Connect/connect.js +202 -197
- package/lib/Connect/contexts/state.js +19 -17
- package/lib/Connect/hooks/provider-list.js +33 -33
- package/lib/Connect/plugins/email/list-item.js +14 -14
- package/lib/Connect/plugins/email/placeholder.js +77 -76
- package/lib/package.json.js +1 -1
- package/package.json +14 -9
- package/.aigne/doc-smith/config.yaml +0 -85
- package/.aigne/doc-smith/history.yaml +0 -6
- package/.aigne/doc-smith/output/structure-plan.json +0 -204
- package/.aigne/doc-smith/translation-cache.yaml +0 -11
- package/.aigne/doc-smith/upload-cache.yaml +0 -213
- package/docs/_sidebar.md +0 -18
- package/docs/advanced-authentication-methods.ja.md +0 -261
- package/docs/advanced-authentication-methods.md +0 -261
- package/docs/advanced-authentication-methods.zh-TW.md +0 -261
- package/docs/advanced-authentication-methods.zh.md +0 -261
- package/docs/advanced-utilities.ja.md +0 -132
- package/docs/advanced-utilities.md +0 -132
- package/docs/advanced-utilities.zh-TW.md +0 -132
- package/docs/advanced-utilities.zh.md +0 -132
- package/docs/advanced.ja.md +0 -95
- package/docs/advanced.md +0 -95
- package/docs/advanced.zh-TW.md +0 -95
- package/docs/advanced.zh.md +0 -95
- package/docs/api-reference.ja.md +0 -178
- package/docs/api-reference.md +0 -178
- package/docs/api-reference.zh-TW.md +0 -178
- package/docs/api-reference.zh.md +0 -178
- package/docs/assets/diagram/core-components-session-provider-01.ja.jpg +0 -0
- package/docs/assets/diagram/core-components-session-provider-01.jpg +0 -0
- package/docs/assets/diagram/core-components-session-provider-01.zh-TW.jpg +0 -0
- package/docs/assets/diagram/core-components-session-provider-01.zh.jpg +0 -0
- package/docs/assets/diagram/did-connect-diagram-0.ja.jpg +0 -0
- package/docs/assets/diagram/did-connect-diagram-0.jpg +0 -0
- package/docs/assets/diagram/did-connect-diagram-0.zh-TW.jpg +0 -0
- package/docs/assets/diagram/did-connect-diagram-0.zh.jpg +0 -0
- package/docs/assets/diagram/overview-01.ja.jpg +0 -0
- package/docs/assets/diagram/overview-01.jpg +0 -0
- package/docs/assets/diagram/overview-01.zh-TW.jpg +0 -0
- package/docs/assets/diagram/overview-01.zh.jpg +0 -0
- package/docs/assets/diagram/use-connect-diagram-0.ja.jpg +0 -0
- package/docs/assets/diagram/use-connect-diagram-0.jpg +0 -0
- package/docs/assets/diagram/use-connect-diagram-0.zh-TW.jpg +0 -0
- package/docs/assets/diagram/use-connect-diagram-0.zh.jpg +0 -0
- package/docs/core-components-did-connect.ja.md +0 -166
- package/docs/core-components-did-connect.md +0 -166
- package/docs/core-components-did-connect.zh-TW.md +0 -166
- package/docs/core-components-did-connect.zh.md +0 -166
- package/docs/core-components-session-provider.ja.md +0 -197
- package/docs/core-components-session-provider.md +0 -197
- package/docs/core-components-session-provider.zh-TW.md +0 -197
- package/docs/core-components-session-provider.zh.md +0 -197
- package/docs/core-components.ja.md +0 -16
- package/docs/core-components.md +0 -16
- package/docs/core-components.zh-TW.md +0 -16
- package/docs/core-components.zh.md +0 -16
- package/docs/getting-started.ja.md +0 -138
- package/docs/getting-started.md +0 -138
- package/docs/getting-started.zh-TW.md +0 -138
- package/docs/getting-started.zh.md +0 -138
- package/docs/hooks-use-connect.ja.md +0 -178
- package/docs/hooks-use-connect.md +0 -178
- package/docs/hooks-use-connect.zh-TW.md +0 -178
- package/docs/hooks-use-connect.zh.md +0 -178
- package/docs/hooks-use-did.ja.md +0 -107
- package/docs/hooks-use-did.md +0 -107
- package/docs/hooks-use-did.zh-TW.md +0 -107
- package/docs/hooks-use-did.zh.md +0 -107
- package/docs/hooks-use-oauth-passkey.ja.md +0 -188
- package/docs/hooks-use-oauth-passkey.md +0 -188
- package/docs/hooks-use-oauth-passkey.zh-TW.md +0 -188
- package/docs/hooks-use-oauth-passkey.zh.md +0 -188
- package/docs/hooks.ja.md +0 -23
- package/docs/hooks.md +0 -23
- package/docs/hooks.zh-TW.md +0 -23
- package/docs/hooks.zh.md +0 -23
- package/docs/overview.ja.md +0 -119
- package/docs/overview.md +0 -119
- package/docs/overview.zh-TW.md +0 -119
- package/docs/overview.zh.md +0 -119
- package/docs/ui-components-address.ja.md +0 -121
- package/docs/ui-components-address.md +0 -121
- package/docs/ui-components-address.zh-TW.md +0 -121
- package/docs/ui-components-address.zh.md +0 -121
- package/docs/ui-components-avatar.ja.md +0 -65
- package/docs/ui-components-avatar.md +0 -65
- package/docs/ui-components-avatar.zh-TW.md +0 -65
- package/docs/ui-components-avatar.zh.md +0 -65
- package/docs/ui-components-button.ja.md +0 -99
- package/docs/ui-components-button.md +0 -99
- package/docs/ui-components-button.zh-TW.md +0 -99
- package/docs/ui-components-button.zh.md +0 -99
- package/docs/ui-components-logo.ja.md +0 -52
- package/docs/ui-components-logo.md +0 -52
- package/docs/ui-components-logo.zh-TW.md +0 -52
- package/docs/ui-components-logo.zh.md +0 -52
- package/docs/ui-components.ja.md +0 -57
- package/docs/ui-components.md +0 -57
- package/docs/ui-components.zh-TW.md +0 -57
- package/docs/ui-components.zh.md +0 -57
- package/glossary.md +0 -1
- package/src/Address/index.jsx +0 -2
- package/src/Avatar/index.jsx +0 -2
- package/src/Button/Button.stories.jsx +0 -7
- package/src/Button/index.jsx +0 -21
- package/src/Connect/Connect.stories.jsx +0 -34
- package/src/Connect/assets/locale.js +0 -149
- package/src/Connect/assets/login-bg.png +0 -0
- package/src/Connect/assets/login-slogan.js +0 -7
- package/src/Connect/components/action-button.jsx +0 -22
- package/src/Connect/components/app-tips.jsx +0 -156
- package/src/Connect/components/auto-height.jsx +0 -38
- package/src/Connect/components/back-button.jsx +0 -24
- package/src/Connect/components/connect-status.jsx +0 -259
- package/src/Connect/components/did-connect-title.jsx +0 -107
- package/src/Connect/components/download-tips.jsx +0 -55
- package/src/Connect/components/loading.jsx +0 -25
- package/src/Connect/components/login-item/connect-choose-list.jsx +0 -317
- package/src/Connect/components/login-item/connect-provider-list.jsx +0 -462
- package/src/Connect/components/login-item/login-method-item.jsx +0 -139
- package/src/Connect/components/login-item/mobile-login-item.jsx +0 -181
- package/src/Connect/components/login-item/passkey-login-item.jsx +0 -54
- package/src/Connect/components/login-item/wallet-login-options.jsx +0 -129
- package/src/Connect/components/login-item/web-login-item.jsx +0 -157
- package/src/Connect/components/mask-overlay.jsx +0 -32
- package/src/Connect/components/refresh-overlay.jsx +0 -52
- package/src/Connect/components/switch-app.jsx +0 -69
- package/src/Connect/connect.jsx +0 -617
- package/src/Connect/contexts/state.jsx +0 -234
- package/src/Connect/fallback-connect.jsx +0 -47
- package/src/Connect/fullpage.jsx +0 -3
- package/src/Connect/hooks/auth-url.js +0 -31
- package/src/Connect/hooks/method-list.js +0 -121
- package/src/Connect/hooks/page-show.js +0 -24
- package/src/Connect/hooks/provider-list.js +0 -165
- package/src/Connect/hooks/security.js +0 -40
- package/src/Connect/hooks/token.js +0 -627
- package/src/Connect/hooks/use-apps.js +0 -69
- package/src/Connect/hooks/use-quick-connect.js +0 -119
- package/src/Connect/index.jsx +0 -21
- package/src/Connect/landing-page.jsx +0 -3
- package/src/Connect/plugins/email/index.jsx +0 -85
- package/src/Connect/plugins/email/list-item.jsx +0 -34
- package/src/Connect/plugins/email/placeholder.jsx +0 -365
- package/src/Connect/plugins/index.js +0 -2
- package/src/Connect/use-connect.jsx +0 -321
- package/src/Connect/with-blocklet.jsx +0 -26
- package/src/Connect/with-bridge-call.jsx +0 -138
- package/src/Federated/context.jsx +0 -93
- package/src/Federated/index.jsx +0 -1
- package/src/Logo/index.jsx +0 -2
- package/src/OAuth/bind-conflict-alert.jsx +0 -37
- package/src/OAuth/context.jsx +0 -407
- package/src/OAuth/guest.svg +0 -20
- package/src/OAuth/index.jsx +0 -1
- package/src/OAuth/passport-switcher.jsx +0 -2
- package/src/Passkey/actions.jsx +0 -217
- package/src/Passkey/constants.js +0 -2
- package/src/Passkey/context.jsx +0 -395
- package/src/Passkey/dialog.jsx +0 -401
- package/src/Passkey/icon.jsx +0 -10
- package/src/Passkey/index.jsx +0 -2
- package/src/Service/index.jsx +0 -96
- package/src/Session/assets/did-spaces-guide-cover.svg +0 -1
- package/src/Session/assets/did-spaces-guide-icon.svg +0 -7
- package/src/Session/context.jsx +0 -7
- package/src/Session/did-spaces-guide.jsx +0 -173
- package/src/Session/handler.jsx +0 -98
- package/src/Session/hooks/use-federated.js +0 -91
- package/src/Session/hooks/use-mobile.jsx +0 -6
- package/src/Session/hooks/use-protected-routes.js +0 -16
- package/src/Session/hooks/use-session-token.js +0 -400
- package/src/Session/hooks/use-verify.jsx +0 -76
- package/src/Session/index.jsx +0 -1789
- package/src/Session/libs/constants.js +0 -17
- package/src/Session/libs/did-spaces.js +0 -38
- package/src/Session/libs/federated.js +0 -82
- package/src/Session/libs/index.js +0 -5
- package/src/Session/libs/locales.js +0 -160
- package/src/Session/libs/login-mobile.js +0 -80
- package/src/Session/window-focus-aware.jsx +0 -28
- package/src/SessionManager/index.jsx +0 -2
- package/src/Storage/engine/cookie.js +0 -25
- package/src/Storage/engine/local-storage.js +0 -57
- package/src/Storage/index.js +0 -25
- package/src/User/index.js +0 -4
- package/src/User/use-did.js +0 -80
- package/src/User/wrap-did.jsx +0 -18
- package/src/WebWalletSWKeeper/index.jsx +0 -3
- package/src/components/PassportSwitcher.jsx +0 -160
- package/src/constant.js +0 -27
- package/src/error.js +0 -6
- package/src/hooks/use-locale.jsx +0 -6
- package/src/index.js +0 -32
- package/src/locales/en.jsx +0 -15
- package/src/locales/index.jsx +0 -13
- package/src/locales/zh.jsx +0 -15
- package/src/types.d.ts +0 -355
- package/src/utils.js +0 -413
- package/vite.config.mjs +0 -29
|
@@ -1,188 +0,0 @@
|
|
|
1
|
-
# useOAuth & usePasskey
|
|
2
|
-
|
|
3
|
-
雖然 `DidConnect` 元件和 `useConnect` hook 為所有驗證方法提供了一套全面、預先建置好的 UI,但您可能需要建置自訂的驗證流程。`useOAuth` 和 `usePasskey` hook 提供了直接存取社交登入(OAuth)和無密碼驗證(Passkey)底層邏輯的方法。
|
|
4
|
-
|
|
5
|
-
這些 hook 是建立客製化使用者體驗的強大工具。它們依賴於各自的 context provider,即 `OAuthProvider` 和 `PasskeyProvider`,而這些 provider 通常包含在主 `SessionProvider` 中。有關 session 管理的更多資訊,請參閱 [SessionProvider 文件](./core-components-session-provider.md)。
|
|
6
|
-
|
|
7
|
-
## useOAuth
|
|
8
|
-
|
|
9
|
-
`useOAuth` hook 提供了用於處理第三方社交登入流程的函式和狀態。
|
|
10
|
-
|
|
11
|
-
### 匯入
|
|
12
|
-
|
|
13
|
-
```javascript icon=logos:javascript
|
|
14
|
-
import { useOAuth } from '@arcblock/did-connect-react/lib/OAuth';
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
### 返回值
|
|
18
|
-
|
|
19
|
-
此 hook 會返回一個包含以下屬性和方法的物件:
|
|
20
|
-
|
|
21
|
-
<x-field-group>
|
|
22
|
-
<x-field data-name="loginOAuth" data-type="function" data-required="true">
|
|
23
|
-
<x-field-desc markdown>使用指定的 OAuth provider 啟動登入流程。它會開啟一個彈出視窗供使用者授權,並返回一個 promise,該 promise 會解析為登入結果。</x-field-desc>
|
|
24
|
-
</x-field>
|
|
25
|
-
<x-field data-name="bindOAuth" data-type="function" data-required="true">
|
|
26
|
-
<x-field-desc markdown>將新的 OAuth 帳號綁定到目前登入使用者的 session。</x-field-desc>
|
|
27
|
-
</x-field>
|
|
28
|
-
<x-field data-name="unbindOAuth" data-type="function" data-required="true">
|
|
29
|
-
<x-field-desc markdown>從目前使用者的 session 解除綁定一個 OAuth 帳號。</x-field-desc>
|
|
30
|
-
</x-field>
|
|
31
|
-
<x-field data-name="getOAuthConfigList" data-type="function" data-required="true">
|
|
32
|
-
<x-field-desc markdown>從 blocklet 設定中取得已啟用和已設定的 OAuth provider 列表。返回一個 promise,該 promise 會解析為一個 provider 設定物件的陣列。</x-field-desc>
|
|
33
|
-
</x-field>
|
|
34
|
-
<x-field data-name="switchOAuthPassport" data-type="function" data-required="true">
|
|
35
|
-
<x-field-desc markdown>啟動一個流程,以在相同身分的不同已連接帳號(passports)之間切換。</x-field-desc>
|
|
36
|
-
</x-field>
|
|
37
|
-
<x-field data-name="bindAuthLoading" data-type="boolean" data-required="true">
|
|
38
|
-
<x-field-desc markdown>一個布林值標誌,在 `bindOAuth` 操作進行中時為 `true`。</x-field-desc>
|
|
39
|
-
</x-field>
|
|
40
|
-
<x-field data-name="unbindAuthLoading" data-type="boolean" data-required="true">
|
|
41
|
-
<x-field-desc markdown>一個布林值標誌,在 `unbindOAuth` 操作進行中時為 `true`。</x-field-desc>
|
|
42
|
-
</x-field>
|
|
43
|
-
<x-field data-name="oauthState" data-type="object" data-required="true">
|
|
44
|
-
<x-field-desc markdown>一個包含驗證過程即時狀態的物件。</x-field-desc>
|
|
45
|
-
<x-field data-name="loading" data-type="boolean" data-desc="如果 OAuth 操作正在進行中,則為 True。"></x-field>
|
|
46
|
-
<x-field data-name="error" data-type="string" data-desc="如果操作失敗,則包含錯誤訊息。"></x-field>
|
|
47
|
-
<x-field data-name="status" data-type="string" data-desc="流程的目前狀態(例如 'scanned', 'succeed', 'error')。"></x-field>
|
|
48
|
-
</x-field>
|
|
49
|
-
</x-field-group>
|
|
50
|
-
|
|
51
|
-
### 使用範例
|
|
52
|
-
|
|
53
|
-
這是一個如何建置自訂社交登入元件的範例。
|
|
54
|
-
|
|
55
|
-
```jsx CustomSocialLogin.jsx icon=logos:react
|
|
56
|
-
import React, { useEffect, useState } from 'react';
|
|
57
|
-
import { useOAuth } from '@arcblock/did-connect-react/lib/OAuth';
|
|
58
|
-
import { useSession } from '@arcblock/did-connect-react/lib/Session';
|
|
59
|
-
|
|
60
|
-
export default function CustomSocialLogin() {
|
|
61
|
-
const { loginOAuth, getOAuthConfigList } = useOAuth();
|
|
62
|
-
const { session } = useSession();
|
|
63
|
-
const [providers, setProviders] = useState([]);
|
|
64
|
-
const [loading, setLoading] = useState(false);
|
|
65
|
-
const [error, setError] = useState('');
|
|
66
|
-
|
|
67
|
-
useEffect(() => {
|
|
68
|
-
// 當元件掛載時,取得可用的 OAuth provider 列表
|
|
69
|
-
getOAuthConfigList().then(setProviders).catch(console.error);
|
|
70
|
-
}, [getOAuthConfigList]);
|
|
71
|
-
|
|
72
|
-
const handleLogin = async (provider) => {
|
|
73
|
-
setLoading(true);
|
|
74
|
-
setError('');
|
|
75
|
-
try {
|
|
76
|
-
const result = await loginOAuth({ provider: provider.provider });
|
|
77
|
-
// 成功登入後,SessionProvider 會自動更新 session。
|
|
78
|
-
console.log('Login successful:', result);
|
|
79
|
-
// 您可能需要在此處重新整理 session 或重新導向使用者。
|
|
80
|
-
} catch (err) {
|
|
81
|
-
setError(err.message);
|
|
82
|
-
console.error('Login failed:', err);
|
|
83
|
-
} finally {
|
|
84
|
-
setLoading(false);
|
|
85
|
-
}
|
|
86
|
-
};
|
|
87
|
-
|
|
88
|
-
if (session.user) {
|
|
89
|
-
return <div>You are already logged in as {session.user.name}.</div>;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
if (providers.length === 0) {
|
|
93
|
-
return <div>No social login methods configured.</div>;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
return (
|
|
97
|
-
<div>
|
|
98
|
-
<h3>Login with Social Media</h3>
|
|
99
|
-
{providers.map((p) => (
|
|
100
|
-
<button key={p.provider} onClick={() => handleLogin(p)} disabled={loading}>
|
|
101
|
-
{loading ? 'Logging in...' : `Login with ${p.provider}`}
|
|
102
|
-
</button>
|
|
103
|
-
))}
|
|
104
|
-
{error && <p style={{ color: 'red' }}>{error}</p>}
|
|
105
|
-
</div>
|
|
106
|
-
);
|
|
107
|
-
}
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
## usePasskey
|
|
111
|
-
|
|
112
|
-
`usePasskey` hook 提供了使用 WebAuthn(Passkeys)處理無密碼驗證的函式和狀態。
|
|
113
|
-
|
|
114
|
-
### 匯入
|
|
115
|
-
|
|
116
|
-
```javascript icon=logos:javascript
|
|
117
|
-
import { usePasskey } from '@arcblock/did-connect-react/lib/Passkey';
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
### 返回值
|
|
121
|
-
|
|
122
|
-
此 hook 會返回一個包含以下屬性和方法的物件:
|
|
123
|
-
|
|
124
|
-
<x-field-group>
|
|
125
|
-
<x-field data-name="loginPasskey" data-type="function" data-required="true">
|
|
126
|
-
<x-field-desc markdown>使用現有的 Passkey 啟動登入流程。它會觸發瀏覽器原生的 WebAuthn 驗證提示。</x-field-desc>
|
|
127
|
-
</x-field>
|
|
128
|
-
<x-field data-name="connectPasskey" data-type="function" data-required="true">
|
|
129
|
-
<x-field-desc markdown>啟動一個流程,以建立並將新的 Passkey 綁定到目前使用者的 session。</x-field-desc>
|
|
130
|
-
</x-field>
|
|
131
|
-
<x-field data-name="disconnectPasskey" data-type="function" data-required="true">
|
|
132
|
-
<x-field-desc markdown>成功驗證後,從目前使用者的 session 解除綁定 Passkey。</x-field-desc>
|
|
133
|
-
</x-field>
|
|
134
|
-
<x-field data-name="switchPassport" data-type="function" data-required="true">
|
|
135
|
-
<x-field-desc markdown>啟動一個流程,以在不同的已連接帳號(passports)之間切換。</x-field-desc>
|
|
136
|
-
</x-field>
|
|
137
|
-
<x-field data-name="connecting" data-type="boolean" data-required="true">
|
|
138
|
-
<x-field-desc markdown>一個布林值標誌,在 `connectPasskey` 操作進行中時為 `true`。</x-field-desc>
|
|
139
|
-
</x-field>
|
|
140
|
-
<x-field data-name="disconnecting" data-type="boolean" data-required="true">
|
|
141
|
-
<x-field-desc markdown>一個布林值標誌,在 `disconnectPasskey` 操作進行中時為 `true`。</x-field-desc>
|
|
142
|
-
</x-field>
|
|
143
|
-
<x-field data-name="passkeyState" data-type="object" data-required="true">
|
|
144
|
-
<x-field-desc markdown>一個包含 Passkey 操作即時狀態的物件。</x-field-desc>
|
|
145
|
-
<x-field data-name="loading" data-type="boolean" data-desc="如果 Passkey 操作正在進行中,則為 True。"></x-field>
|
|
146
|
-
<x-field data-name="creating" data-type="boolean" data-desc="在 Passkey 建立階段為 True。"></x-field>
|
|
147
|
-
<x-field data-name="verifying" data-type="boolean" data-desc="在 Passkey 驗證階段為 True。"></x-field>
|
|
148
|
-
<x-field data-name="error" data-type="string" data-desc="如果操作失敗,則包含錯誤訊息。"></x-field>
|
|
149
|
-
<x-field data-name="status" data-type="string" data-desc="流程的目前狀態(例如 'scanned', 'succeed', 'error')。"></x-field>
|
|
150
|
-
</x-field>
|
|
151
|
-
</x-field-group>
|
|
152
|
-
|
|
153
|
-
### 使用範例
|
|
154
|
-
|
|
155
|
-
這是一個如何建立「使用 Passkey 登入」按鈕的範例。
|
|
156
|
-
|
|
157
|
-
```jsx PasskeyLoginButton.jsx icon=logos:react
|
|
158
|
-
import React, { useState } from 'react';
|
|
159
|
-
import { usePasskey } from '@arcblock/did-connect-react/lib/Passkey';
|
|
160
|
-
|
|
161
|
-
export default function PasskeyLoginButton() {
|
|
162
|
-
const { loginPasskey, passkeyState } = usePasskey();
|
|
163
|
-
const [error, setError] = useState('');
|
|
164
|
-
|
|
165
|
-
const handleLogin = async () => {
|
|
166
|
-
setError('');
|
|
167
|
-
try {
|
|
168
|
-
const result = await loginPasskey();
|
|
169
|
-
console.log('Passkey login successful:', result);
|
|
170
|
-
// SessionProvider 會自動更新 session。
|
|
171
|
-
} catch (err) {
|
|
172
|
-
setError(err.message);
|
|
173
|
-
console.error('Passkey login failed:', err);
|
|
174
|
-
}
|
|
175
|
-
};
|
|
176
|
-
|
|
177
|
-
return (
|
|
178
|
-
<div>
|
|
179
|
-
<button onClick={handleLogin} disabled={passkeyState.loading}>
|
|
180
|
-
{passkeyState.loading ? 'Verifying...' : 'Login with Passkey'}
|
|
181
|
-
</button>
|
|
182
|
-
{error && <p style={{ color: 'red' }}>{error}</p>}
|
|
183
|
-
</div>
|
|
184
|
-
);
|
|
185
|
-
}
|
|
186
|
-
```
|
|
187
|
-
|
|
188
|
-
這些 hook 提供了將 DID Connect 強大的驗證功能整合到您應用程式的任何部分,並使用完全自訂 UI 的靈活性。要了解如何以程式化方式控制預先建置的 `DidConnect` 互動視窗,請繼續閱讀 [useConnect hook 文件](./hooks-use-connect.md)。
|
|
@@ -1,188 +0,0 @@
|
|
|
1
|
-
# useOAuth & usePasskey
|
|
2
|
-
|
|
3
|
-
`DidConnect` 组件和 `useConnect` hook 为所有身份验证方法提供了全面的、预构建的用户界面,但你可能需要构建自定义的身份验证流程。`useOAuth` 和 `usePasskey` hook 提供了对社交登录 (OAuth) 和无密码身份验证 (Passkey) 底层逻辑的直接访问。
|
|
4
|
-
|
|
5
|
-
这些 hook 是创建定制化用户体验的强大工具。它们依赖于各自的上下文提供程序 `OAuthProvider` 和 `PasskeyProvider`,这些提供程序通常包含在主 `SessionProvider` 中。有关会话管理的更多信息,请参阅 [SessionProvider 文档](./core-components-session-provider.md)。
|
|
6
|
-
|
|
7
|
-
## useOAuth
|
|
8
|
-
|
|
9
|
-
`useOAuth` hook 提供了用于处理第三方社交登录流程的函数和状态。
|
|
10
|
-
|
|
11
|
-
### 导入
|
|
12
|
-
|
|
13
|
-
```javascript icon=logos:javascript
|
|
14
|
-
import { useOAuth } from '@arcblock/did-connect-react/lib/OAuth';
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
### 返回值
|
|
18
|
-
|
|
19
|
-
该 hook 返回一个包含以下属性和方法的对象:
|
|
20
|
-
|
|
21
|
-
<x-field-group>
|
|
22
|
-
<x-field data-name="loginOAuth" data-type="function" data-required="true">
|
|
23
|
-
<x-field-desc markdown>使用指定的 OAuth 提供商启动登录流程。它会打开一个弹出窗口供用户授权,并返回一个解析为登录结果的 promise。</x-field-desc>
|
|
24
|
-
</x-field>
|
|
25
|
-
<x-field data-name="bindOAuth" data-type="function" data-required="true">
|
|
26
|
-
<x-field-desc markdown>将新的 OAuth 帐户绑定到当前登录用户的会话。</x-field-desc>
|
|
27
|
-
</x-field>
|
|
28
|
-
<x-field data-name="unbindOAuth" data-type="function" data-required="true">
|
|
29
|
-
<x-field-desc markdown>从当前用户的会话中解绑 OAuth 帐户。</x-field-desc>
|
|
30
|
-
</x-field>
|
|
31
|
-
<x-field data-name="getOAuthConfigList" data-type="function" data-required="true">
|
|
32
|
-
<x-field-desc markdown>从 Blocklet 设置中获取已启用和已配置的 OAuth 提供商列表。返回一个解析为提供商配置对象数组的 promise。</x-field-desc>
|
|
33
|
-
</x-field>
|
|
34
|
-
<x-field data-name="switchOAuthPassport" data-type="function" data-required="true">
|
|
35
|
-
<x-field-desc markdown>启动一个流程,用于在同一身份的不同已连接帐户(通行证)之间切换。</x-field-desc>
|
|
36
|
-
</x-field>
|
|
37
|
-
<x-field data-name="bindAuthLoading" data-type="boolean" data-required="true">
|
|
38
|
-
<x-field-desc markdown>一个布尔标志,当 `bindOAuth` 操作正在进行时为 `true`。</x-field-desc>
|
|
39
|
-
</x-field>
|
|
40
|
-
<x-field data-name="unbindAuthLoading" data-type="boolean" data-required="true">
|
|
41
|
-
<x-field-desc markdown>一个布尔标志,当 `unbindOAuth` 操作正在进行时为 `true`。</x-field-desc>
|
|
42
|
-
</x-field>
|
|
43
|
-
<x-field data-name="oauthState" data-type="object" data-required="true">
|
|
44
|
-
<x-field-desc markdown>一个包含身份验证过程实时状态的对象。</x-field-desc>
|
|
45
|
-
<x-field data-name="loading" data-type="boolean" data-desc="如果 OAuth 操作正在进行,则为 True。"></x-field>
|
|
46
|
-
<x-field data-name="error" data-type="string" data-desc="如果操作失败,则包含错误消息。"></x-field>
|
|
47
|
-
<x-field data-name="status" data-type="string" data-desc="流程的当前状态(例如,'scanned', 'succeed', 'error')。"></x-field>
|
|
48
|
-
</x-field>
|
|
49
|
-
</x-field-group>
|
|
50
|
-
|
|
51
|
-
### 用法示例
|
|
52
|
-
|
|
53
|
-
以下是如何构建自定义社交登录组件的示例。
|
|
54
|
-
|
|
55
|
-
```jsx CustomSocialLogin.jsx icon=logos:react
|
|
56
|
-
import React, { useEffect, useState } from 'react';
|
|
57
|
-
import { useOAuth } from '@arcblock/did-connect-react/lib/OAuth';
|
|
58
|
-
import { useSession } from '@arcblock/did-connect-react/lib/Session';
|
|
59
|
-
|
|
60
|
-
export default function CustomSocialLogin() {
|
|
61
|
-
const { loginOAuth, getOAuthConfigList } = useOAuth();
|
|
62
|
-
const { session } = useSession();
|
|
63
|
-
const [providers, setProviders] = useState([]);
|
|
64
|
-
const [loading, setLoading] = useState(false);
|
|
65
|
-
const [error, setError] = useState('');
|
|
66
|
-
|
|
67
|
-
useEffect(() => {
|
|
68
|
-
// 组件挂载时获取可用的 OAuth 提供商列表
|
|
69
|
-
getOAuthConfigList().then(setProviders).catch(console.error);
|
|
70
|
-
}, [getOAuthConfigList]);
|
|
71
|
-
|
|
72
|
-
const handleLogin = async (provider) => {
|
|
73
|
-
setLoading(true);
|
|
74
|
-
setError('');
|
|
75
|
-
try {
|
|
76
|
-
const result = await loginOAuth({ provider: provider.provider });
|
|
77
|
-
// 成功登录后,会话将由 SessionProvider 自动更新。
|
|
78
|
-
console.log('Login successful:', result);
|
|
79
|
-
// 你可能需要在此处刷新会话或重定向用户。
|
|
80
|
-
} catch (err) {
|
|
81
|
-
setError(err.message);
|
|
82
|
-
console.error('Login failed:', err);
|
|
83
|
-
} finally {
|
|
84
|
-
setLoading(false);
|
|
85
|
-
}
|
|
86
|
-
};
|
|
87
|
-
|
|
88
|
-
if (session.user) {
|
|
89
|
-
return <div>您已登录为 {session.user.name}。</div>;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
if (providers.length === 0) {
|
|
93
|
-
return <div>未配置社交登录方法。</div>;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
return (
|
|
97
|
-
<div>
|
|
98
|
-
<h3>使用社交媒体登录</h3>
|
|
99
|
-
{providers.map((p) => (
|
|
100
|
-
<button key={p.provider} onClick={() => handleLogin(p)} disabled={loading}>
|
|
101
|
-
{loading ? '登录中...' : `使用 ${p.provider} 登录`}
|
|
102
|
-
</button>
|
|
103
|
-
))}
|
|
104
|
-
{error && <p style={{ color: 'red' }}>{error}</p>}
|
|
105
|
-
</div>
|
|
106
|
-
);
|
|
107
|
-
}
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
## usePasskey
|
|
111
|
-
|
|
112
|
-
`usePasskey` hook 提供了使用 WebAuthn (Passkeys) 处理无密码身份验证的函数和状态。
|
|
113
|
-
|
|
114
|
-
### 导入
|
|
115
|
-
|
|
116
|
-
```javascript icon=logos:javascript
|
|
117
|
-
import { usePasskey } from '@arcblock/did-connect-react/lib/Passkey';
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
### 返回值
|
|
121
|
-
|
|
122
|
-
该 hook 返回一个包含以下属性和方法的对象:
|
|
123
|
-
|
|
124
|
-
<x-field-group>
|
|
125
|
-
<x-field data-name="loginPasskey" data-type="function" data-required="true">
|
|
126
|
-
<x-field-desc markdown>使用现有的 Passkey 启动登录流程。它会触发浏览器的原生 WebAuthn 身份验证提示。</x-field-desc>
|
|
127
|
-
</x-field>
|
|
128
|
-
<x-field data-name="connectPasskey" data-type="function" data-required="true">
|
|
129
|
-
<x-field-desc markdown>启动一个流程,以创建新的 Passkey 并将其绑定到当前用户的会话。</x-field-desc>
|
|
130
|
-
</x-field>
|
|
131
|
-
<x-field data-name="disconnectPasskey" data-type="function" data-required="true">
|
|
132
|
-
<x-field-desc markdown>成功验证后,从当前用户的会话中解绑 Passkey。</x-field-desc>
|
|
133
|
-
</x-field>
|
|
134
|
-
<x-field data-name="switchPassport" data-type="function" data-required="true">
|
|
135
|
-
<x-field-desc markdown>启动一个流程,用于在不同的已连接帐户(通行证)之间切换。</x-field-desc>
|
|
136
|
-
</x-field>
|
|
137
|
-
<x-field data-name="connecting" data-type="boolean" data-required="true">
|
|
138
|
-
<x-field-desc markdown>一个布尔标志,当 `connectPasskey` 操作正在进行时为 `true`。</x-field-desc>
|
|
139
|
-
</x-field>
|
|
140
|
-
<x-field data-name="disconnecting" data-type="boolean" data-required="true">
|
|
141
|
-
<x-field-desc markdown>一个布尔标志,当 `disconnectPasskey` 操作正在进行时为 `true`。</x-field-desc>
|
|
142
|
-
</x-field>
|
|
143
|
-
<x-field data-name="passkeyState" data-type="object" data-required="true">
|
|
144
|
-
<x-field-desc markdown>一个包含 Passkey 操作实时状态的对象。</x-field-desc>
|
|
145
|
-
<x-field data-name="loading" data-type="boolean" data-desc="如果 Passkey 操作正在进行,则为 True。"></x-field>
|
|
146
|
-
<x-field data-name="creating" data-type="boolean" data-desc="在 Passkey 创建阶段为 True。"></x-field>
|
|
147
|
-
<x-field data-name="verifying" data-type="boolean" data-desc="在 Passkey 验证阶段为 True。"></x-field>
|
|
148
|
-
<x-field data-name="error" data-type="string" data-desc="如果操作失败,则包含错误消息。"></x-field>
|
|
149
|
-
<x-field data-name="status" data-type="string" data-desc="流程的当前状态(例如,'scanned', 'succeed', 'error')。"></x-field>
|
|
150
|
-
</x-field>
|
|
151
|
-
</x-field-group>
|
|
152
|
-
|
|
153
|
-
### 用法示例
|
|
154
|
-
|
|
155
|
-
以下是如何创建“使用 Passkey 登录”按钮的示例。
|
|
156
|
-
|
|
157
|
-
```jsx PasskeyLoginButton.jsx icon=logos:react
|
|
158
|
-
import React, { useState } from 'react';
|
|
159
|
-
import { usePasskey } from '@arcblock/did-connect-react/lib/Passkey';
|
|
160
|
-
|
|
161
|
-
export default function PasskeyLoginButton() {
|
|
162
|
-
const { loginPasskey, passkeyState } = usePasskey();
|
|
163
|
-
const [error, setError] = useState('');
|
|
164
|
-
|
|
165
|
-
const handleLogin = async () => {
|
|
166
|
-
setError('');
|
|
167
|
-
try {
|
|
168
|
-
const result = await loginPasskey();
|
|
169
|
-
console.log('Passkey login successful:', result);
|
|
170
|
-
// 会话将由 SessionProvider 自动更新。
|
|
171
|
-
} catch (err) {
|
|
172
|
-
setError(err.message);
|
|
173
|
-
console.error('Passkey login failed:', err);
|
|
174
|
-
}
|
|
175
|
-
};
|
|
176
|
-
|
|
177
|
-
return (
|
|
178
|
-
<div>
|
|
179
|
-
<button onClick={handleLogin} disabled={passkeyState.loading}>
|
|
180
|
-
{passkeyState.loading ? '验证中...' : '使用 Passkey 登录'}
|
|
181
|
-
</button>
|
|
182
|
-
{error && <p style={{ color: 'red' }}>{error}</p>}
|
|
183
|
-
</div>
|
|
184
|
-
);
|
|
185
|
-
}
|
|
186
|
-
```
|
|
187
|
-
|
|
188
|
-
这些 hook 提供了将 DID Connect 强大的身份验证功能以完全自定义的 UI 集成到应用程序任何部分的灵活性。要了解如何以编程方式控制预构建的 `DidConnect` 模态框,请继续阅读 [useConnect hook 文档](./hooks-use-connect.md)。
|
package/docs/hooks.ja.md
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
# フック
|
|
2
|
-
|
|
3
|
-
`@arcblock/did-connect-react` ライブラリは、プログラムによる制御と柔軟なデータアクセスを提供する強力なReactフックのセットを提供します。[SessionProvider](./core-components-session-provider.md) は便利なコンテキストベースのアプローチを提供しますが、フックは複雑なUIや高度なユースケースに必要なきめ細かい制御を提供します。
|
|
4
|
-
|
|
5
|
-
これらのフックを使用すると、接続フローの管理、ユーザーデータへのアクセス、および `SessionProvider` のスコープ内の任意のコンポーネントからさまざまな認証方法を統合できます。
|
|
6
|
-
|
|
7
|
-
<x-cards data-columns="3">
|
|
8
|
-
<x-card data-title="useConnect" data-icon="lucide:plug-zap" data-href="/hooks/use-connect">
|
|
9
|
-
DID Connect UIモーダルをプログラムで開閉・管理します。これは接続フローを制御するためのコアフックです。
|
|
10
|
-
</x-card>
|
|
11
|
-
<x-card data-title="useDid" data-icon="lucide:user-check" data-href="/hooks/use-did">
|
|
12
|
-
セッションから認証されたユーザーのDID、プロフィール、ウォレット情報に簡単にアクセスして作業するための便利なユーティリティフックです。
|
|
13
|
-
</x-card>
|
|
14
|
-
<x-card data-title="useOAuth & usePasskey" data-icon="lucide:key-round" data-href="/hooks/use-oauth-passkey">
|
|
15
|
-
モダンで代替的な認証方法を統合します。`useOAuth` はソーシャルログインを処理し、`usePasskey` は安全なパスワードレス認証を可能にします。
|
|
16
|
-
</x-card>
|
|
17
|
-
</x-cards>
|
|
18
|
-
|
|
19
|
-
## 概要
|
|
20
|
-
|
|
21
|
-
これらのフックを活用することで、高度にカスタマイズされたシームレスなユーザーエクスペリエンスを構築できます。まず `useConnect` を調べてログインフローをトリガーする方法を理解し、次に `useDid` がユーザー情報を表示するのにどのように役立つかを確認してください。
|
|
22
|
-
|
|
23
|
-
さらに深く掘り下げますか?上記のフックから選択して詳細を学ぶか、[UIコンポーネント](./ui-components.md)セクションに進んでユーザーデータの表示方法を確認してください。
|
package/docs/hooks.md
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
# Hooks
|
|
2
|
-
|
|
3
|
-
The `@arcblock/did-connect-react` library offers a powerful set of React hooks that provide programmatic control and flexible data access. While the [SessionProvider](./core-components-session-provider.md) offers a convenient context-based approach, hooks give you the fine-grained control needed for complex UIs and advanced use cases.
|
|
4
|
-
|
|
5
|
-
These hooks allow you to manage the connection flow, access user data, and integrate various authentication methods from any component within the `SessionProvider`'s scope.
|
|
6
|
-
|
|
7
|
-
<x-cards data-columns="3">
|
|
8
|
-
<x-card data-title="useConnect" data-icon="lucide:plug-zap" data-href="/hooks/use-connect">
|
|
9
|
-
Programmatically open, close, and manage the DID Connect UI modal. This is the core hook for controlling the connection flow.
|
|
10
|
-
</x-card>
|
|
11
|
-
<x-card data-title="useDid" data-icon="lucide:user-check" data-href="/hooks/use-did">
|
|
12
|
-
A convenient utility hook to easily access and work with the authenticated user's DID, profile, and wallet information from the session.
|
|
13
|
-
</x-card>
|
|
14
|
-
<x-card data-title="useOAuth & usePasskey" data-icon="lucide:key-round" data-href="/hooks/use-oauth-passkey">
|
|
15
|
-
Integrate modern, alternative authentication methods. `useOAuth` handles social logins, while `usePasskey` enables secure, passwordless authentication.
|
|
16
|
-
</x-card>
|
|
17
|
-
</x-cards>
|
|
18
|
-
|
|
19
|
-
## Summary
|
|
20
|
-
|
|
21
|
-
By leveraging these hooks, you can build highly customized and seamless user experiences. Start by exploring `useConnect` to understand how to trigger the login flow, then see how `useDid` can help you display user information.
|
|
22
|
-
|
|
23
|
-
Ready to dive deeper? Choose a hook from above to learn more, or proceed to the [UI Components](./ui-components.md) section to see how you can display user data.
|
package/docs/hooks.zh-TW.md
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
# Hooks
|
|
2
|
-
|
|
3
|
-
`@arcblock/did-connect-react` 函式庫提供了一組強大的 React hooks,可提供程式化控制和靈活的資料存取。雖然 [SessionProvider](./core-components-session-provider.md) 提供了一種方便的基於上下文的方法,但 hooks 為您提供了複雜 UI 和進階用例所需的精細控制。
|
|
4
|
-
|
|
5
|
-
這些 hooks 讓您可以在 `SessionProvider` 作用域內的任何元件中管理連接流程、存取使用者資料以及整合各種身份驗證方法。
|
|
6
|
-
|
|
7
|
-
<x-cards data-columns="3">
|
|
8
|
-
<x-card data-title="useConnect" data-icon="lucide:plug-zap" data-href="/hooks/use-connect">
|
|
9
|
-
以程式化方式開啟、關閉和管理 DID Connect UI 互動視窗。這是控制連接流程的核心 hook。
|
|
10
|
-
</x-card>
|
|
11
|
-
<x-card data-title="useDid" data-icon="lucide:user-check" data-href="/hooks/use-did">
|
|
12
|
-
一個方便的實用工具 hook,可輕鬆從 session 中存取和使用通過身份驗證的使用者的 DID、個人資料和錢包資訊。
|
|
13
|
-
</x-card>
|
|
14
|
-
<x-card data-title="useOAuth & usePasskey" data-icon="lucide:key-round" data-href="/hooks/use-oauth-passkey">
|
|
15
|
-
整合現代的替代身份驗證方法。`useOAuth` 處理社交登入,而 `usePasskey` 則啟用安全、無密碼的身份驗證。
|
|
16
|
-
</x-card>
|
|
17
|
-
</x-cards>
|
|
18
|
-
|
|
19
|
-
## 總結
|
|
20
|
-
|
|
21
|
-
透過利用這些 hooks,您可以建構高度客製化和無縫的使用者體驗。首先探索 `useConnect` 以了解如何觸發登入流程,然後看看 `useDid` 如何幫助您顯示使用者資訊。
|
|
22
|
-
|
|
23
|
-
準備好深入了解了嗎?從上面選擇一個 hook 以了解更多資訊,或前往 [UI Components](./ui-components.md) 部分查看如何顯示使用者資料。
|
package/docs/hooks.zh.md
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
# Hooks
|
|
2
|
-
|
|
3
|
-
`@arcblock/did-connect-react` 库提供了一套功能强大的 React Hooks,可实现编程控制和灵活的数据访问。虽然 [SessionProvider](./core-components-session-provider.md) 提供了一种方便的基于上下文的方法,但 Hooks 为您提供了复杂 UI 和高级用例所需的精细控制。
|
|
4
|
-
|
|
5
|
-
这些 Hooks 允许您从 `SessionProvider` 作用域内的任何组件管理连接流程、访问用户数据并集成各种身份验证方法。
|
|
6
|
-
|
|
7
|
-
<x-cards data-columns="3">
|
|
8
|
-
<x-card data-title="useConnect" data-icon="lucide:plug-zap" data-href="/hooks/use-connect">
|
|
9
|
-
以编程方式打开、关闭和管理 DID Connect UI 模态框。这是控制连接流程的核心 Hook。
|
|
10
|
-
</x-card>
|
|
11
|
-
<x-card data-title="useDid" data-icon="lucide:user-check" data-href="/hooks/use-did">
|
|
12
|
-
一个方便的实用工具 Hook,可轻松访问和使用会话中经过身份验证的用户的 DID、个人资料和钱包信息。
|
|
13
|
-
</x-card>
|
|
14
|
-
<x-card data-title="useOAuth & usePasskey" data-icon="lucide:key-round" data-href="/hooks/use-oauth-passkey">
|
|
15
|
-
集成现代的替代身份验证方法。`useOAuth` 处理社交登录,而 `usePasskey` 则实现安全的无密码身份验证。
|
|
16
|
-
</x-card>
|
|
17
|
-
</x-cards>
|
|
18
|
-
|
|
19
|
-
## 摘要
|
|
20
|
-
|
|
21
|
-
通过利用这些 Hooks,您可以构建高度定制化和无缝的用户体验。首先探索 `useConnect` 以了解如何触发登录流程,然后看看 `useDid` 如何帮助您显示用户信息。
|
|
22
|
-
|
|
23
|
-
准备好深入了解了吗?从上面选择一个 Hook 以了解更多信息,或继续前往 [UI 组件](./ui-components.md) 部分查看如何显示用户数据。
|
package/docs/overview.ja.md
DELETED
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
# 概要
|
|
2
|
-
|
|
3
|
-
`@arcblock/did-connect-react`ライブラリは、分散型アイデンティティ(DID)機能をウェブアプリケーションにシームレスに統合するために設計された、包括的なReactコンポーネントとフックのセットを提供します。ArcBlockのDID Walletを使用したユーザー認証とセッション管理のプロセスを簡素化し、従来のログインシステムに代わる、安全で使いやすい代替手段を提供します。
|
|
4
|
-
|
|
5
|
-
このライブラリは、すぐに使える完全なソリューションが必要な場合でも、認証フローに対するきめ細かな制御が必要な場合でも、柔軟で使いやすいように構築されています。
|
|
6
|
-
|
|
7
|
-
### 主な機能
|
|
8
|
-
|
|
9
|
-
<x-cards data-columns="2">
|
|
10
|
-
<x-card data-title="完全な接続UI" data-icon="lucide:qr-code-icon">
|
|
11
|
-
`DidConnect`コンポーネントを含み、QRコードのスキャンと接続プロセス全体を処理するための、事前に構築されたカスタマイズ可能なモーダルを提供します。
|
|
12
|
-
</x-card>
|
|
13
|
-
<x-card data-title="シームレスなセッション管理" data-icon="lucide:key-round">
|
|
14
|
-
`SessionProvider`と`useSession`フックを活用して、アプリケーション全体でユーザーのログイン状態、セッション、プロファイルデータを簡単に管理します。
|
|
15
|
-
</x-card>
|
|
16
|
-
<x-card data-title="柔軟なプログラムによる制御" data-icon="lucide:webhook">
|
|
17
|
-
`useConnect`のようなフックを使用して、接続モーダルをプログラムで開閉・管理し、ユーザーエクスペリエンスを完全に制御できます。
|
|
18
|
-
</x-card>
|
|
19
|
-
<x-card data-title="豊富なUIツールキット" data-icon="lucide:gem">
|
|
20
|
-
`Avatar`、`Address`、`Button`などの補足的なUIコンポーネントのコレクションで、ユーザーのアイデンティティ情報を一貫して表示します。
|
|
21
|
-
</x-card>
|
|
22
|
-
</x-cards>
|
|
23
|
-
|
|
24
|
-
### コアアーキテクチャ
|
|
25
|
-
|
|
26
|
-
このライブラリは、ユーザーのセッション状態を管理する中央の`SessionProvider`を中心に展開します。`Button`のようなUIコンポーネントは`DidConnect`モーダルをトリガーでき、これはユーザーのDID Walletとの安全なQRコードベースの対話を処理します。接続が完了すると、セッションが更新され、アプリケーションのUIがそれに応じて反応します。
|
|
27
|
-
|
|
28
|
-
`@arcblock/did-connect-react`はクライアントサイドのライブラリであり、認証ロジックを処理するために対応するバックエンドサービスが必要であることに注意することが重要です。このサービスは、Node.js用の[`@arcblock/did-connect-js`](https://www.arcblock.io/docs/did-connect-sdk)ライブラリを使用して構築する必要があります。
|
|
29
|
-
|
|
30
|
-
<!-- DIAGRAM_IMAGE_START:architecture:16:9:1765962229 -->
|
|
31
|
-

|
|
32
|
-
<!-- DIAGRAM_IMAGE_END -->
|
|
33
|
-
|
|
34
|
-
### インストール
|
|
35
|
-
|
|
36
|
-
開始するには、`yarn`または`npm`を使用してライブラリをプロジェクトに追加します。
|
|
37
|
-
|
|
38
|
-
```shell インストール icon=lucide:download
|
|
39
|
-
# yarnを使用
|
|
40
|
-
yarn add @arcblock/did-connect-react
|
|
41
|
-
|
|
42
|
-
# npmを使用
|
|
43
|
-
npm install @arcblock/did-connect-react
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
### 仕組み:クイックルック
|
|
47
|
-
|
|
48
|
-
以下は、ログインフローを設定するための最小限の例です。アプリケーションは`SessionProvider`でラップされ、`Button`を使用して`DidConnect`モーダルを切り替えます。
|
|
49
|
-
|
|
50
|
-
```jsx App.js icon=logos:react
|
|
51
|
-
import React from 'react';
|
|
52
|
-
import axios from 'axios';
|
|
53
|
-
import { SessionProvider, SessionConsumer } from '@arcblock/did-connect-react/lib/Session';
|
|
54
|
-
import DidConnect from '@arcblock/did-connect-react/lib/Connect';
|
|
55
|
-
import Button from '@arcblock/did-connect-react/lib/Button';
|
|
56
|
-
|
|
57
|
-
const webWalletUrl = 'https://web.abtwallet.io/';
|
|
58
|
-
|
|
59
|
-
function App() {
|
|
60
|
-
const [isConnectOpen, setConnectOpen] = React.useState(false);
|
|
61
|
-
|
|
62
|
-
const handleClose = () => setConnectOpen(false);
|
|
63
|
-
const handleSuccess = () => {
|
|
64
|
-
// ログイン成功後にリダイレクトまたはUIを更新
|
|
65
|
-
window.location.reload();
|
|
66
|
-
};
|
|
67
|
-
|
|
68
|
-
return (
|
|
69
|
-
<SessionProvider serviceHost="/">
|
|
70
|
-
<div className="main-content">
|
|
71
|
-
<SessionConsumer>
|
|
72
|
-
{({ session }) => {
|
|
73
|
-
if (session.loading) {
|
|
74
|
-
return <div>セッションを読み込み中...</div>;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
return session.user ? (
|
|
78
|
-
<div>
|
|
79
|
-
<h2>ようこそ、{session.user.did}さん!</h2>
|
|
80
|
-
<button onClick={() => session.logout()}>ログアウト</button>
|
|
81
|
-
</div>
|
|
82
|
-
) : (
|
|
83
|
-
<Button onClick={() => setConnectOpen(true)}>ウォレットを接続</Button>
|
|
84
|
-
);
|
|
85
|
-
}}
|
|
86
|
-
</SessionConsumer>
|
|
87
|
-
</div>
|
|
88
|
-
|
|
89
|
-
<DidConnect
|
|
90
|
-
popup
|
|
91
|
-
open={isConnectOpen}
|
|
92
|
-
action="login"
|
|
93
|
-
checkFn={axios.get}
|
|
94
|
-
onClose={handleClose}
|
|
95
|
-
onSuccess={handleSuccess}
|
|
96
|
-
messages={{
|
|
97
|
-
title: 'マイアプリにログイン',
|
|
98
|
-
scan: 'DID WalletでQRコードをスキャンしてください',
|
|
99
|
-
confirm: 'ウォレットでログインを確認してください',
|
|
100
|
-
success: '正常にサインインしました!',
|
|
101
|
-
}}
|
|
102
|
-
webWalletUrl={webWalletUrl}
|
|
103
|
-
/>
|
|
104
|
-
</SessionProvider>
|
|
105
|
-
);
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
export default App;
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
この例は、わずかなコンポーネントでユーザーセッションを管理し、ログインプロセスをトリガーする方法を示しています。
|
|
112
|
-
|
|
113
|
-
### 次のステップ
|
|
114
|
-
|
|
115
|
-
これでライブラリの基本的な理解ができたので、さらに深く掘り下げる準備ができました。
|
|
116
|
-
|
|
117
|
-
<x-card data-title="はじめに" data-href="/getting-started" data-icon="lucide:rocket" data-cta="構築を開始">
|
|
118
|
-
ステップバイステップのガイドに従って、DID Connectをゼロから独自のアプリケーションに統合します。
|
|
119
|
-
</x-card>
|