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开发, 无密码认证, 自动化攻击