Robot-Inventor/payload-passkey
GitHub: Robot-Inventor/payload-passkey
为 Payload CMS 添加 Passkey 无密码登录支持的身份验证插件,基于 Better Auth 封装并兼容 TOTP。
Stars: 0 | Forks: 0
# payload-passkey
此插件使用 [Better Auth](https://github.com/better-auth/better-auth) 为 [Payload CMS](https://github.com/payloadcms/payload) 添加了 passkey 支持。
虽然它是 [@delmaredigital/payload-better-auth](https://github.com/delmaredigital/payload-better-auth/) 的封装,但此插件专门针对 passkey 进行了优化。它保留了 Payload 的默认登录界面,并使用 Payload 的 UI 组件以匹配 Payload 的设计语言。
## 功能
- 在 Payload 的登录界面添加 passkey 登录按钮
- 在账户管理界面添加 passkey 管理功能
- 支持在 Payload 配置中启用时自动刷新 token
- 支持与 [Payload TOTP](https://github.com/GeorgeHulpoi/payload-totp) 同时使用
- i18n 支持(测试版)
根据用户的设置,他们可以使用以下方式之一进行登录:
- 不使用 Payload TOTP,或者使用 Payload TOTP 但未配置 TOTP 的用户:(邮箱 AND 密码) OR passkey
- 使用 Payload TOTP 且已配置 TOTP 的用户:(邮箱 AND 密码 AND TOTP) OR passkey
## 安装说明
```
pnpm add payload-passkey
```
## 基本用法
```
# .env
BETTER_AUTH_SECRET=your-secret-key-longer-than-32-characters
```
```
// payload.config.ts
import { buildConfig } from "payload";
import { payloadPasskey } from "payload-passkey";
const config = buildConfig({
collections: [
{
slug: "users",
auth: true,
fields: [...],
},
]
plugins: [
payloadPasskey({
enableTotpCompatibility: true,
rpID: "your-domain.example.com",
rpName: "Example App",
origin: "https://your-domain.example.com",
modelName: "user",
userCollection: "users",
baseURL: "https://your-domain.example.com",
secret: process.env.BETTER_AUTH_SECRET,
trustedOrigins: ["https://your-domain.example.com"],
generateId: "serial"
})
]
});
export default config;
```
配置完成后,请运行数据库迁移。如果您使用的是 Payload 的默认身份验证策略,则无需更新用户的密码;运行数据库迁移就足够了。
```
npm run payload migrate:create
npm run payload migrate
```
### 与 Payload TOTP 结合使用
此插件也可以与 Payload TOTP 结合使用。
```
// payload.config.ts
import { buildConfig } from "payload";
import { payloadPasskey } from "payload-passkey";
const config = buildConfig({
collections: [
{
slug: "users",
auth: true,
fields: [...],
},
]
plugins: [
payloadPasskey({
enableTotpCompatibility: true,
rpID: "your-domain.example.com",
rpName: "Example App",
origin: "https://your-domain.example.com",
modelName: "user",
userCollection: "users",
baseURL: "https://your-domain.example.com",
secret: process.env.BETTER_AUTH_SECRET,
trustedOrigins: ["https://your-domain.example.com"],
generateId: "serial"
}),
// `payloadTotp()` must be called after `payloadPasskey()`;
// otherwise, the collection generated by payload-passkey won't be protected by Payload TOTP.
payloadTotp({
collection: "users",
totp: {
issuer: "Example App"
}
})
]
});
export default config;
```
配置完成后,请运行数据库迁移。如果您使用的是 Payload 的默认身份验证策略,则无需更新用户的密码;运行数据库迁移就足够了。
```
npm run payload migrate:create
npm run payload migrate
```
## 选项
有关所有可用选项及其说明,请参阅 `payloadPasskey()` 参数的 JSDoc。
标签:CMS, MITM代理, Passkey, Payload插件, Syscall, Web开发, 无密码认证, 自动化攻击