# 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>; 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
``` ### Q: 如何禁用自动刷新? ```javascript Fido2UIManager.renderDeviceManager({ autoRefresh: false }); ``` ### Q: 如何更改刷新间隔? ```javascript Fido2UIManager.renderDeviceManager({ autoRefresh: true, refreshInterval: 10000 // 10秒 }); ``` --- ## 版本历史 - **v1.0.0** - 初始版本 - 支持模态框和独立页面两种模式 - 支持主题定制 - 支持国际化 - 完整的事件系统