tyler36/confirmable-trait

此软件包最新版本(1.0.1)没有提供许可证信息。

一个简单的特质,用于添加确认某事的能力

1.0.1 2018-06-19 07:56 UTC

This package is auto-updated.

Last update: 2024-08-29 04:43:11 UTC


README

此软件包旨在简化确认模型(例如,用户)的过程。

  • 用户生成确认模型,并发送令牌给他们的电子邮件。
  • 为了确认,用户必须输入他们的电子邮件和带有设定时间限制的确认令牌。
  • 用户可以请求一个新的确认令牌。

安装

  • 安装软件包
composer require tyler36/confirmable-trait
  • 通过命令行发布资产
php artisan vendor:publish --provider=Tyler36\ConfirmableTrait\ConfirmableServiceProvider
  • 将特质添加到用户模型中 在您的用户模型中,添加以下行
// App\User.php
use Tyler36\ConfirmableTrait\Confirmable;

Class User extends Model
...
    use Confirmable;
  • 运行迁移 通过运行已发布的迁移来更新用户表
php artisan migrate
  • 注册事件
// App\Providers\EventServiceProvider.php
...
    protected $listen = [
        UserRequestedConfirmationEmail::class => [
            SendConfirmationEmail::class
        ]
    ];
  • 更新视图 更新 ConfirmUserController.php 中的视图,使其指向视图页面
// App\Http\Controllers\Auth\ConfirmUserController.php
...
    public function edit()
    {
        return view('auth.confirmation');
    }

您可以通过应用中间件或将简单链接添加到视图来实现重定向所有已认证且未确认的用户视图。我喜欢在个人资料页面上添加一个通知。

// view/user/show.blade.php
...
    @if($user->isNotConfirmed())
        @include('common.confirmation_required')
    @endif
// view/forms/confirmation.blade.php
...
<form method="post" action="{{ route('confirm.update') }}">
    @csrf()

    {{-- FORM:      Email --}}
    <div class="field form-email">
            <label for="email" class="label">@lang('user.email')</label>
            <input name="email" type="email" required="true">
    </div>


    {{-- FORM:      Token --}}
    <div class="field form-token">
        <label for="token" class="label">@lang('confirmable::message.token')</label>
        <input name="token" type="text" required="true">
    </div>

    {{-- FORM:      Acceptance --}}
    <div class="field form-acceptance">
        <label class="label">@lang('confirmable::message.acceptance')</label>
        <input id="terms" name="terms" type="checkbox">
        <label for="terms" class="text-transform-off">
            I have read and agree to the <a href="#">terms and conditions</a> and <a href="#">privacy policy</a> of this site.
        </label>
    </div>

    {{-- FORM:      Submit --}}
    <button type="submit">Submit</button>
</form>
  • 应用中间件 此软件包包含用于保护路由的2个中间件。

isConfirmed

此中间件仅允许已确认的成员。即成员当前已登录并且被标记为已确认。要注册中间件,请更新 App\Http\Kernel.php 如下所示

// App\Http\Kernel.php
...
protected $routeMiddleware = [
    ...
    'auth.confirmed'    => \Tyler36\ConfirmableTrait\Middleware\isConfirmed::class,
]

当然,您可以将中间件名称('auth.confirmed')更改为任何您想要的。

isNotConfirmed

此中间件仅允许未确认的成员。即成员当前已登录但尚未确认。要注册中间件,请更新 App\Http\Kernel.php 如下所示

// App\Http\Kernel.php
...
protected $routeMiddleware = [
    ...
    'auth.notconfirmed'    => \Tyler36\ConfirmableTrait\Middleware\isNotConfirmed::class,
]

模型

用户模型

在将此特质添加到用户模型后,将提供几个新的功能

  • 检查用户是否已确认(返回布尔值)。
$user->isConfirmed()
  • 检查用户是否未确认(返回布尔值)。
$user->isNotConfirmed()
  • 手动标记用户为已确认
$user->markConfirmed()
  • 您可以通过关系获取当前的确认模型
$user->confirmation

确认模型

此模型包含确认令牌及其相关的电子邮件账户。

  • 您可以通过关系获取用户
$confirmation->user

验证令牌

此软件包旨在通过检查与电子邮件和令牌匹配的记录来确认用户。验证有多个层次。

  • 检查确认令牌是否存在于已认证用户中
$confirmation = Confirmation::firstOrFail(['email' => auth()->user()->email]);
  • 在时间限制内验证用户提供的 $token
$confirmation->validateToken($token)

您可以通过更新确认模型来覆盖默认的24小时时间间隔

// Confirmation.php
class Confirmation extends Model
{
    ...
    protected $validForHours = 24;

工厂助手

为您的用户模型提供了2个额外的工厂状态助手

'isConfirmed' 用户状态

这将生成一个已确认的用户。即 'confirmed' => true

factory(App\User::class)->states('isConfirmed')->create();

'isNotConfirmed' 用户状态

这将生成一个未确认的用户。即 'confirmed' => false

factory(App\User::class)->states('isNotConfirmed')->create();

翻译

在发布资产后,您可以通过供应商翻译文件覆盖软件包翻译。注意包名后的双冒号。

// In PHP files
trans('confirmable::message.token.mismatch')

// In blade files
@lang('confirmable::message.token.mismatch')