desmart / password-reset
Laravel 的密码重置机制。为 https://github.com/DeSmart/laravel-vanilla 设计。
Requires
- php: >=7.0.0
- desmart/laravel-commandbus: dev-master
- laravel/framework: 5.4.*
Requires (Dev)
- phpunit/phpunit: ~5.0
This package is not auto-updated.
Last update: 2024-09-14 20:35:40 UTC
README
Laravel 的密码重置机制。该软件包提供端点和逻辑,以简单易行的方式允许您的应用程序用户重置他们的密码。
安装
使用 Composer 安装软件包
composer require desmart/password-reset
在 config/app.php
中注册软件包的服务提供者
'providers' => [
(...)
DeSmart\PasswordReset\ServiceProvider::class,
],
运行 Artisan 的 vendor:publish
命令
php artisan vendor:publish
这将复制 password-reset.php
配置文件和 password_reset_init.blade.php
邮件模板到正确的目录,让您可以进行修改。
运行数据库迁移
php artisan migrate
提供的迁移将删除当前 password_resets
表(如果存在)并创建一个新的表。
配置
为了使软件包能够向用户发送电子邮件,必须配置 Laravel 的邮件发送器。为此,请在 .env
文件中填写以下值
MAIL_DRIVER=<DRIVER> # e.g. smtp
MAIL_HOST=<HOST> # e.g. smtp.gmail.com
MAIL_PORT=<PORT> # e.g. 587
MAIL_USERNAME=<USERNAME> # e.g. mailer@foobar.com
MAIL_PASSWORD=<PASSWORD>
MAIL_ENCRYPTION=<ENCRYPTION> # e.g. tls
MAIL_FROM_EMAIL=<EMAIL> # e.g. mailer@foobar.com
MAIL_FROM_NAME=<FROM> # MyCompany
您需要在 config/mail.php
中进行一些更改(因为该文件有一些硬编码的默认值)
'from' => [
'address' => env('MAIL_FROM_EMAIL', 'hello@example.com'),
'name' => env('MAIL_FROM_NAME', 'Example'),
],
这样,我们就可以出发了 :)
使用方法
该软件包提供了三个用于处理密码重置的路由
POST /api/users/password-reset
GET /api/users/password-reset
PUT /api/users/password-reset
如您所见,所有请求的 URI 都是相同的 - 只有动词不同。
让我们简要地了解一下这些路由。
启动密码重置
发送一个 POST
请求将执行以下操作
- 为用户创建密码重置令牌
- 向用户发送包含密码重置链接的电子邮件
如果用户不存在,将抛出异常。
此操作所需的字段
电子邮件
验证令牌
此路由是可选的,但您可能希望使用它以确保用户的 ID 和密码重置令牌都是有效的。
发送一个 GET
请求将执行以下操作
- 检查给定的用户 ID 和密码重置令牌是否都有效
如果
- 用户不存在
- 令牌无效
此操作所需的字段
用户 ID
令牌
设置新密码
发送一个 PUT
请求将执行以下操作
- 使用 Laravel 的密码散列器为用户设置新密码
- 删除密码重置令牌,以便它不能再使用
如果
- 用户不存在
- 令牌无效
- 密码太短(最小 6 个字符)
- 密码确认与密码不匹配
此操作所需的字段
用户 ID
令牌
密码
密码确认
自定义行为
您几乎可以更改任何内容以满足您的需求。
该软件包假设您使用默认的用户模型。如果您想使用自定义模型,请更改 password-reset.php
配置文件。
该文件还包含有关用于密码重置的模型和密码重置链接模式的信息,这些信息包含在发送给用户的电子邮件中。
如果您需要更改验证器或处理器,您始终可以编写自己的 自定义服务提供者,将您的类绑定到适当的接口。
如果您不喜欢软件包提供的路由,请创建自己的服务提供者,删除路由加载部分并定义自己的路由。
更改您想要的 :)
注意
该软件包没有单元测试,很抱歉 :(: 如果您能提供任何测试,那将非常棒。