# Fido2Login SDK API 文档
## 概述
`Fido2UIManager.renderLogin()` 是一个用于渲染登录组件的API,支持:
- Fido2/Passkey 自动登录
- 密码登录回退
- 密码重试次数限制
- 完全的回调驱动(SDK不跳转页面)
## 使用方法
### 1. 引入依赖
```html
```
### 2. 添加容器
```html
```
### 3. 初始化登录组件
```javascript
const loginManager = Fido2UIManager.renderLogin({
container: '#login-container',
features: {
autoAuth: true,
enablePasswordLogin: true,
maxPasswordAttempts: 3,
showRemainingAttempts: true
},
callbacks: {
onFido2Success: (userId, session) => {
// 处理Fido2登录成功
},
onFido2Error: (error) => {
// 处理Fido2登录失败
},
onPasswordLogin: (userId, password) => {
// 返回 Promise
},
onPasswordExhausted: (userId, attempts, maxAttempts) => {
// 密码重试次数耗尽
},
onLoginClosed: () => {
// UI被关闭
}
}
});
```
## 配置参数
### container
- **类型**: `string | Element`
- **必填**: 是
- **说明**: 模态框容器元素
### features
- **类型**: `Object`
- **默认值**: 见下方
| 属性 | 类型 | 默认值 | 说明 |
|------|------|--------|------|
| `autoAuth` | boolean | true | 有注册设备时自动Fido2登录 |
| `enablePasswordLogin` | boolean | true | 是否启用密码登录功能 |
| `autoShowPassword` | boolean | false | Fido2失败后是否自动显示密码框 |
| `maxPasswordAttempts` | number | 3 | 密码最大重试次数 |
| `showRemainingAttempts` | boolean | true | 是否显示剩余尝试次数 |
### theme
- **类型**: `Object`
- **说明**: 复用 `renderDeviceManager` 的theme配置
| 属性 | 类型 | 默认值 | 说明 |
|------|------|--------|------|
| `logo` | string | null | Logo图片URL |
| `primaryColor` | string | '#696cff' | 主色调 |
| `backgroundColor` | string | '#ffffff' | 背景色 |
| `textColor` | string | '#333333' | 文字颜色 |
| `borderRadius` | string | '8px' | 边框圆角 |
### language
- **类型**: `string`
- **默认值**: `'zh-CN'`
- **说明**: 支持9种语言
### callbacks
#### onFido2Success(userId, session)
- **触发时机**: Fido2登录认证成功
- **参数**:
- `userId`: string - 用户ID
- `session`: object - 会话信息
- **注意**: SDK不跳转页面,由调用端处理跳转
#### onFido2Error(error)
- **触发时机**: Fido2登录失败或取消
- **参数**: `error` 对象
- `code`: string - 错误码
- `message`: string - 错误信息
- `originalError`: object - 原始错误
**error.code 值**:
| code | 说明 |
|------|------|
| `CANCELED` | 用户取消认证 |
| `AUTH_FAILED` | 认证失败 |
| `NO_REGISTRATION` | 无注册设备且未启用密码登录 |
| `NOT_SUPPORTED` | 浏览器不支持WebAuthn |
#### onPasswordLogin(userId, password)
- **触发时机**: 用户点击密码登录按钮
- **参数**:
- `userId`: string - 用户ID
- `password`: string - 密码
- **返回值**: `Promise`
- `true`: 登录成功
- `false`: 登录失败
#### onPasswordExhausted(userId, attempts, maxAttempts)
- **触发时机**: 密码重试次数耗尽
- **参数**:
- `userId`: string - 用户ID
- `attempts`: number - 已尝试次数
- `maxAttempts`: number - 最大允许次数
- **注意**: UI已自动关闭
#### onLoginClosed()
- **触发时机**: 用户关闭模态框(点击×或调用hide())
## 实例方法
### show()
显示登录模态框
### hide()
隐藏登录模态框,触发 `onLoginClosed` 回调
### destroy()
销毁登录组件实例,不触发任何回调
### setMode(mode)
切换登录模式
- `mode`: `'fido2'` 或 `'password'`
### getUserId()
获取当前输入的用户ID
### getState()
获取当前状态
- 返回值: `'loading'` | `'fido2'` | `'password'` | `'closed'`
### getMode()
获取当前模式
- 返回值: `'fido2'` | `'password'`
### getAttemptCount()
获取当前密码尝试次数
### getRemainingAttempts()
获取剩余尝试次数
### resetPasswordAttempts()
重置密码尝试计数器
## 国际化支持
默认支持9种语言:
- `en-US` (英语)
- `zh-CN` (简体中文)
- `ja` (日语)
- `es` (西班牙语)
- `de` (德语)
- `fr` (法语)
- `pt` (葡萄牙语)
- `ko` (韩语)
- `ru` (俄语)
- `it` (意大利语)
可通过 `customI18n` 配置自定义文本:
```javascript
Fido2UIManager.renderLogin({
customI18n: {
'title_login': {
'en-US': 'Custom Login',
'zh-CN': '自定义登录'
}
}
});
```
## 完整示例
```html
Login Example
```
## 版本信息
- **FIDO2 UI SDK**: v1.0.0+
- **文件**: `files/fido2-ui-sdk.js`
- **新增功能**: `Fido2UIManager.renderLogin()`