brutalhost / wn-passwordless-plugin
无密码前端登录。
Requires
- php: >=7.0
- composer/installers: ~1.0
- winter/wn-user-plugin: >=2.0.0
This package is auto-updated.
Last update: 2024-10-01 16:33:35 UTC
README
此插件将无密码用户认证引入WinterCMS。用户不再需要填写用户名和密码,前端用户只需提供他们的电子邮件地址,然后接收一个包含登录令牌的链接,即可在网站上注册和认证。无密码认证是安全的,并且可以极大地改善用户体验,因为它简化了注册和登录过程,许多用户都讨厌填写表单和经历繁琐的注册过程。
该插件基于October的Passwordless Login,略有改动。
Brutalhost - 我的新功能
- 支持Winter CMS的最新版本,PHP 8及以上版本
- 已添加设置页面,允许您指定通过电子邮件链接发送的令牌的有效期。
- 您可以在验证电子邮件后处理表单的附加字段。这主要用于实现CAPTCHA。例如
use Brutalhost\YandexSmartcaptcha\Classes\Rules\YandexCaptcha; function onInit() { $this['passwordlessAccount']->bindEvent('login_form_rules', function () { return ['smart-token' => ['required', new YandexCaptcha]]; }); }
- 已修改电子邮件内容(令牌有效期自动替换为设置值)。
功能
- 与Winter.User插件以及自定义认证系统兼容
- 登录令牌仅有效一次,并在30分钟后过期,以提高安全性,同时自动从系统中清除
- 支持登录后重定向
- 可选的JSON API以获取用户详细信息
- 开源,允许并鼓励安全检查
- 对开发者友好且高度可定制
- 包括一种可以最小化重复登录的cookie-token认证方法
如果您觉得这个插件很有用,请考虑捐赠以支持其进一步的开发。
安装
目前,请使用composer进行安装
composer require brutalhost/wn-passwordless-plugin
php artisan winter:up
账户组件
该插件提供了一个账户组件,类似于Winter.User的账户组件。该组件提供主要功能,可以包含在任何应作为登录端点的CMS页面中。
账户组件具有以下属性
model
- [字符串]指定表单验证的用户模型(必须具有电子邮件字段)。默认为Winter\User\Models\User
auth
- [字符串]指定管理认证状态的门面类(见下文)。默认为Winter\User\Facades\Auth
mail_template
[字符串]登录邮件的电子邮件模板。默认为brutalhost.passwordless::mail.login
redirect
[下拉列表]指定登录后要重定向到的页面名称(可以重写,见下文)allow_registration
- [复选框]如果禁用,则只有现有用户可以请求登录api
- [复选框]如果启用,则该组件将公开一个API端点?api
以查询认证状态
该组件将显示电子邮件登录表单,并且如果用户已登录,将显示账户信息。请注意,该组件需要ajax框架才能工作。
认证管理器
可以在账户组件中指定的认证管理器是一个类或门面,它通过标准化的API管理用户认证
login($user) {}
- 登录$user
check() {}
- 检查用户是否已认证(返回布尔值)getUser() {}
- 返回已认证的用户或null
如果未认证logout() {}
- 用户登出
可用的认证管理器
Winter\User\Facades\Auth
由 Winter.User 插件提供的认证管理器。
Brutalhost\Passwordless\Classes\CookieTokenAuth
将认证状态作为令牌存储在 httpOnly cookie 中的认证管理器。用户将保持认证状态,直到 cookie 被删除或令牌过期。该管理器可以作为中间件来保护需要认证的端点。此认证方法对于 RESTful API 特别有用。注意,cookie 只会通过安全的 https 连接传输。如果您想允许 http 连接,可以在 .env
文件中将 COOKIE_TOKEN_SECURE=true
设置为 true。
自定义管理器
为了适应自定义认证机制,您可以实现自己的认证管理器,该管理器遵循给定的 API。如果您实现了对其他人有用的认证管理器,请考虑将其作为拉取请求贡献。
返回重定向
账户管理器可以处理登录后的 GET
重定向请求,例如 ?redirect=/awesome/redirect/url
。这在未认证的用户访问需要认证的页面并被重定向到登录页面时,可以改善用户体验。使用 GET
,可以存储原始请求位置,以便在登录后自动重定向到用户原本想要访问的页面。请注意,GET-重定向会覆盖组件设置中定义的重定向行为。
JSON API
如果启用,账户组件会暴露一个 JSON API 端点,供已认证的用户消费(未认证的用户将收到 401 未授权的响应)。目前,唯一的路由是 ?api=info
,它返回序列化的用户模型。
开发者 API
该插件提供了一个令牌模型 Brutalhost\Passwordless\Models\Token
,开发人员可以重用它来实现令牌管理。该模型提供了两个主要功能:
generate($user, $expires = null, $scope = 'default')
,为给定的$user
模型对象(或更一般地说,令牌负载)返回令牌。确保指定自定义作用域,例如myplugin
,以避免作用域冲突。parse($raw_token, $delete = false, $scope = null)
,解析(可选地删除)在给定$scope
中提供的$raw_token
并返回相应的$user
模型。如果令牌已过期、无效或无法解析,将抛出ApplicationException
。
更多详细信息请参阅 模型类文档。