Files
sample-site/docs/API.md
2026-05-20 22:40:32 +09:00

642 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# FIDO2 UI SDK - API 文档
## 目录
- [全局对象](#全局对象)
- [配置选项](#配置选项)
- [API 方法](#api-方法)
- [事件系统](#事件系统)
- [国际化](#国际化)
- [主题定制](#主题定制)
---
## 全局对象
### Fido2UIManager
全局 FIDO2 UI 管理对象。
```javascript
window.Fido2UIManager
```
---
## 配置选项
### config
配置对象,用于初始化设备管理器。
| 参数 | 类型 | 默认值 | 说明 |
|------|------|--------|------|
| serverUrl | String | 'https://fido2.amipro.me' | FIDO2 服务器地址 |
| mode | String | 'modal' | 渲染模式:'modal' \| 'standalone' |
| container | String \| Element | null | 容器选择器或 DOM 元素modal 模式必需) |
| theme | Object | 见下方 | 主题配置 |
| language | String | 'zh-CN' | 语言:'en-US' \| 'zh-CN' \| 'ja' |
| customI18n | Object | {} | 自定义翻译 |
| features | Object | 见下方 | 功能开关 |
| callbacks | Object | {} | 事件回调 |
| rpId | String \| null | null | Relying Party ID |
| autoRefresh | Boolean | true | 是否自动刷新设备列表 |
| refreshInterval | Number | 5000 | 刷新间隔(毫秒) |
### config.theme
主题配置对象。
| 参数 | 类型 | 默认值 | 说明 |
|------|------|--------|------|
| logo | String \| null | null | Logo 图片 URL |
| primaryColor | String | '#696cff' | 主色调(十六进制颜色值) |
| backgroundColor | String | '#ffffff' | 背景色 |
| textColor | String | '#333333' | 文字颜色 |
| borderRadius | String | '8px' | 圆角大小 |
### config.features
功能开关对象。
| 参数 | 类型 | 默认值 | 说明 |
|------|------|--------|------|
| showAddButton | Boolean | true | 是否显示添加按钮 |
| showDeleteButton | Boolean | true | 是否显示删除按钮 |
| showUserInfo | Boolean | true | 是否显示用户信息 |
| showSessionStatus | Boolean | true | 是否显示会话状态 |
### config.callbacks
事件回调对象。
| 参数 | 类型 | 默认值 | 说明 |
|------|------|--------|------|
| onInit | Function | null | 初始化完成回调 |
| onDeviceAdded | Function | null | 设备添加成功回调 |
| onDeviceDeleted | Function | null | 设备删除成功回调 |
| onDeviceListLoaded | Function | null | 设备列表加载完成回调 |
| onError | Function | null | 错误发生回调 |
| onClose | Function | null | 窗口关闭回调(仅 modal 模式) |
---
## API 方法
### renderDeviceManager(config)
渲染设备管理器。
**语法:**
```javascript
Fido2UIManager.renderDeviceManager(config)
```
**参数:**
- `config` (Object) - 配置对象,详见[配置选项](#配置选项)
**返回值:**
- (Object) - 设备管理器实例
**示例:**
```javascript
const manager = Fido2UIManager.renderDeviceManager({
container: '#device-container',
mode: 'modal',
serverUrl: 'https://fido2.amipro.me'
});
```
---
### close()
关闭模态框(仅 modal 模式有效)。
**语法:**
```javascript
Fido2UIManager.close()
```
**示例:**
```javascript
Fido2UIManager.close();
```
---
### refresh()
刷新设备列表和会话状态。
**语法:**
```javascript
Fido2UIManager.refresh()
```
**示例:**
```javascript
Fido2UIManager.refresh();
```
---
### destroy()
销毁设备管理器实例,清理资源。
**语法:**
```javascript
Fido2UIManager.destroy()
```
**示例:**
```javascript
Fido2UIManager.destroy();
```
---
## 事件系统
### 事件列表
| 事件名称 | 触发时机 | 回调参数 |
|---------|---------|---------|
| `init` | 初始化完成 | (manager: Object) |
| `deviceAdded` | 设备添加成功 | (device: Object) |
| `deviceDeleted` | 设备删除成功 | (deviceId: String) |
| `deviceListLoaded` | 设备列表加载完成 | (devices: Array) |
| `sessionStatusChanged` | 会话状态改变 | (isValid: Boolean) |
| `error` | 发生错误 | (error: Error) |
| `close` | 窗口关闭 | 无 |
### 事件参数详解
#### init
初始化完成时触发。
**参数:**
- `manager` (Object) - 设备管理器实例
**示例:**
```javascript
Fido2UIManager.renderDeviceManager({
callbacks: {
onInit: function(manager) {
console.log('设备管理器已初始化', manager);
}
}
});
```
#### deviceAdded
设备添加成功时触发。
**参数:**
- `device` (Object) - 添加的设备信息
**示例:**
```javascript
Fido2UIManager.renderDeviceManager({
callbacks: {
onDeviceAdded: function(device) {
console.log('设备添加成功', device);
// 刷新用户界面
refreshUserInterface();
}
}
});
```
#### deviceDeleted
设备删除成功时触发。
**参数:**
- `deviceId` (String) - 被删除设备的 ID
**示例:**
```javascript
Fido2UIManager.renderDeviceManager({
callbacks: {
onDeviceDeleted: function(deviceId) {
console.log('设备删除成功', deviceId);
// 显示成功提示
showNotification('设备删除成功');
}
}
});
```
#### deviceListLoaded
设备列表加载完成时触发。
**参数:**
- `devices` (Array) - 设备列表
**示例:**
```javascript
Fido2UIManager.renderDeviceManager({
callbacks: {
onDeviceListLoaded: function(devices) {
console.log('设备列表加载完成,共', devices.length, '个设备');
}
}
});
```
#### sessionStatusChanged
会话状态改变时触发。
**参数:**
- `isValid` (Boolean) - 会话是否有效
**示例:**
```javascript
Fido2UIManager.renderDeviceManager({
callbacks: {
onSessionStatusChanged: function(isValid) {
if (isValid) {
console.log('会话有效');
} else {
console.log('会话无效,请重新登录');
}
}
}
});
```
#### error
发生错误时触发。
**参数:**
- `error` (Error) - 错误对象
**示例:**
```javascript
Fido2UIManager.renderDeviceManager({
callbacks: {
onError: function(error) {
console.error('发生错误:', error.message);
// 显示错误提示
showErrorNotification(error.message);
}
}
});
```
#### close
模态框关闭时触发(仅 modal 模式)。
**参数:**
-
**示例:**
```javascript
Fido2UIManager.renderDeviceManager({
callbacks: {
onClose: function() {
console.log('模态框已关闭');
}
}
});
```
---
## 国际化
### 支持的语言
- `en-US` - 英文
- `zh-CN` - 简体中文
- `ja` - 日文
### 设置语言
通过 `language` 参数设置语言:
```javascript
Fido2UIManager.renderDeviceManager({
language: 'zh-CN'
});
```
### 默认翻译键
| 键 | 英文 | 中文 | 日文 |
|----|------|------|------|
| `my_devices` | My devices | 我的设备 | マイデバイス |
| `btn_add` | Add device | 添加设备 | デバイスを追加 |
| `title_device` | Device | 设备 | デバイス |
| `title_time` | Registered time | 添加时间 | 登録時間 |
| `title_act` | Actions | 操作 | 操作 |
| `title_del` | Delete | 删除 | 削除 |
| `title_logout` | Log out | 登出 | ログアウト |
| `title_empty_list` | No devices, please add. | 无设备,请添加。 | デバイスがなし、追加してください。 |
| `msg_register_ok` | Device registered successfully | 添加设备成功 | デバイス登録完了 |
| `msg_deldev_ok` | Device deleted successfully | 设备删除成功 | デバイスを削除しました |
| `msg_confirm_deldev` | Do you want to delete this device? | 确认删除此设备吗? | デバイスを削除しますか? |
| `msg_session_status_ok` | FIDO2 session is valid | FIDO2会话正常 | FIDO2セッションは正常です |
| `msg_session_status_fail` | FIDO2 session is invalid | FIDO2会话无效 | FIDO2セッションは無効です |
| `btn_close` | Close | 关闭 | 閉じる |
| `title_welcome` | Welcome | 欢迎 | ようこそ |
### 自定义翻译
通过 `customI18n` 参数自定义翻译:
```javascript
Fido2UIManager.renderDeviceManager({
language: 'zh-CN',
customI18n: {
'my_devices': {
'zh-CN': '我的 FIDO2 设备'
},
'btn_add': {
'zh-CN': '添加新设备'
}
}
});
```
---
## 主题定制
### 主题配置参数
| 参数 | 类型 | 默认值 | 说明 |
|------|------|--------|------|
| logo | String \| null | null | Logo 图片 URL |
| primaryColor | String | '#696cff' | 主色调 |
| backgroundColor | String | '#ffffff' | 背景色 |
| textColor | String | '#333333' | 文字颜色 |
| borderRadius | String | '8px' | 圆角大小 |
### 基础主题定制
```javascript
Fido2UIManager.renderDeviceManager({
theme: {
logo: '/assets/my-logo.png',
primaryColor: '#ce59d9',
backgroundColor: '#ffffff'
}
});
```
### 完整主题定制
```javascript
Fido2UIManager.renderDeviceManager({
theme: {
logo: '/assets/my-logo.png',
primaryColor: '#0066cc',
backgroundColor: '#f8f9fa',
textColor: '#333333',
borderRadius: '12px'
}
});
```
### 深色主题示例
```javascript
Fido2UIManager.renderDeviceManager({
theme: {
logo: '/assets/logo.png',
primaryColor: '#4a9eff',
backgroundColor: '#1a1a2e',
textColor: '#ffffff',
borderRadius: '8px'
}
});
```
---
## 设备管理器实例方法
如果需要访问设备管理器实例,可以保存 `renderDeviceManager` 的返回值:
```javascript
const manager = Fido2UIManager.renderDeviceManager(config);
```
### 实例方法
| 方法 | 说明 |
|------|------|
| `close()` | 关闭模态框(仅 modal 模式) |
| `refresh()` | 刷新设备列表和会话状态 |
| `destroy()` | 销毁设备管理器实例 |
### 示例
```javascript
const manager = Fido2UIManager.renderDeviceManager({
container: '#device-container',
mode: 'modal'
});
// 手动刷新
manager.refresh();
// 关闭模态框
manager.close();
// 销毁实例
manager.destroy();
```
---
## CSS 类名
SDK 使用以下 CSS 类名,可以通过 CSS 覆盖样式:
| 类名 | 说明 |
|------|------|
| `.fido2-sdk-modal` | 模态框容器 |
| `.fido2-sdk-card` | 卡片容器 |
| `.fido2-sdk-header` | 头部区域 |
| `.fido2-sdk-container` | 内容容器 |
| `.fido2-sdk-body` | 主体内容 |
| `.fido2-sdk-text` | 文字样式 |
| `.fido2-sdk-table` | 表格样式 |
| `.fido2-sdk-btn` | 按钮样式 |
| `.fido2-sdk-btn-primary` | 主要按钮样式 |
| `.fido2-sdk-status-badge` | 状态徽章样式 |
| `.fido2-sdk-user-info` | 用户信息样式 |
| `.fido2-sdk-standalone` | 独立页面样式 |
| `.fido2-sdk-logo` | Logo 样式 |
### 自定义 CSS 示例
```css
/* 自定义按钮样式 */
.fido2-sdk-btn-primary {
background-color: #ff6b6b !important;
font-weight: bold;
}
/* 自定义表格样式 */
.fido2-sdk-table th {
font-size: 14px;
color: #666;
}
/* 自定义模态框样式 */
.fido2-sdk-modal .modal-content {
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
}
```
---
## 类型定义
### ConfigObject
```typescript
interface ConfigObject {
serverUrl?: string;
mode?: 'modal' | 'standalone';
container?: string | Element;
theme?: ThemeObject;
language?: string;
customI18n?: Record<string, Record<string, string>>;
features?: FeaturesObject;
callbacks?: CallbacksObject;
rpId?: string | null;
autoRefresh?: boolean;
refreshInterval?: number;
}
```
### ThemeObject
```typescript
interface ThemeObject {
logo?: string | null;
primaryColor?: string;
backgroundColor?: string;
textColor?: string;
borderRadius?: string;
}
```
### FeaturesObject
```typescript
interface FeaturesObject {
showAddButton?: boolean;
showDeleteButton?: boolean;
showUserInfo?: boolean;
showSessionStatus?: boolean;
}
```
### CallbacksObject
```typescript
interface CallbacksObject {
onInit?: (manager: any) => void;
onDeviceAdded?: (device: any) => void;
onDeviceDeleted?: (deviceId: string) => void;
onDeviceListLoaded?: (devices: any[]) => void;
onError?: (error: Error) => void;
onClose?: () => void;
}
```
---
## 常见问题
### Q: 如何在页面加载后自动打开设备管理器?
```javascript
window.onload = function() {
Fido2UIManager.renderDeviceManager({
container: '#device-container',
mode: 'modal'
});
};
```
### Q: 如何在用户点击按钮后才打开设备管理器?
```html
<button onclick="openDeviceManager()">管理设备</button>
<div id="device-container"></div>
<script>
function openDeviceManager() {
Fido2UIManager.renderDeviceManager({
container: '#device-container',
mode: 'modal'
});
}
</script>
```
### Q: 如何禁用自动刷新?
```javascript
Fido2UIManager.renderDeviceManager({
autoRefresh: false
});
```
### Q: 如何更改刷新间隔?
```javascript
Fido2UIManager.renderDeviceManager({
autoRefresh: true,
refreshInterval: 10000 // 10秒
});
```
---
## 版本历史
- **v1.0.0** - 初始版本
- 支持模态框和独立页面两种模式
- 支持主题定制
- 支持国际化
- 完整的事件系统