brutalhost/wn-passwordless-plugin

无密码前端登录。

安装: 0

依赖项: 0

建议者: 0

安全: 0

星标: 0

关注者: 0

分支: 7

类型:winter-plugin

dev-winter 2024-08-30 18:35 UTC

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

更多详细信息请参阅 模型类文档