jpnut/extended-laravel-auth

此包已被弃用,不再维护。未建议替代包。

Laravel 扩展认证实现

0.1.0 2018-04-04 15:53 UTC

This package is auto-updated.

Last update: 2020-09-10 15:26:52 UTC


README

此包扩展了默认的 Laravel 认证框架,允许为每个用户创建多个“记住我”令牌。

使用 Laravel 的默认认证,一次只能将一个“记住我”令牌与一个用户关联。这对于使用多个设备的用户来说是一个问题。例如,考虑一个用户在两个设备上(例如,在桌面和移动设备上)使用“记住我”功能登录。如果这个用户在一个设备上注销(例如,移动设备),则“记住我”令牌将被重新生成,并且用户在其他设备上(本例中为桌面)不会自动登录。我们通过允许为每个用户存储多个“记住我”令牌来解决这个问题。

此过程还具有额外的优势,即允许应用程序使特定的“记住我”令牌无效。例如,如果用户在公共设备上意外点击“记住我”,则默认流程只允许用户在所有设备上使令牌无效。使用此包,我们可以选择性地吊销令牌。

安装

您可以使用 composer 安装此包

composer require jpnut/extended-laravel-auth

您可以使用以下命令发布迁移

php artisan vendor:publish --provider="JPNut\ExtendedAuth\AuthServiceProvider" --tag="migrations"

请注意,此包目前不处理用户表中“remember_token”字段的删除。任何现有令牌将不会自动转移。发布迁移后,您可以通过运行迁移来创建令牌表

php artisan migrate

您可以使用以下命令发布配置文件

php artisan vendor:publish --provider="JPNut\ExtendedAuth\AuthServiceProvider" --tag="config"

用法

由于默认的“记住我”令牌认证实现已嵌入到 "Illuminate\Contracts\Auth\Authenticatable" 协议中,因此此包覆盖了它,并提供了 Laravel 提供的 "Illuminate\Foundation\Auth\User" 的替代方案。

您必须确保您的 User 模型实现 "JPNut\ExtendedAuth\Contracts\Authenticatable"。最简单的方法是扩展 "JPNut\ExtendedAuth\User"

use JPNut\ExtendedAuth\User as Authenticatable;

class User extends Authenticatable
{
    // ...
}

要启用保护者,您需要按以下方式修改 config/auth.php

...
    'guards' => [
        'extended-web' => [
            'driver' => 'extended-session',
            'provider' => 'extended-users',
        ],
    ],
...
    'extended-users' => [
        'driver' => 'extended-eloquent',
        'model' => JPNut\ExtendedAuth\User::class,
    ],
...

您还应该确保在您希望使用此保护者的路由上定义了保护者。对于大多数情况,这涉及到将默认保护者更改为 extended-web。请注意,可以在 config/extended-auth 文件中修改 extended-sessionextended-eloquent

默认 Laravel 框架的某些其他区域也依赖于此包中已更改的功能

  • 您应该在 config/app.php 中注释掉 Illuminate\Auth\Passwords\PasswordResetServiceProvider::class
  • 在测试期间,您应该使用 JPNut\ExtendedAuth\Testing\TestCase 覆盖 Illuminate\Foundation\Testing\TestCase
  • 对于密码重置,您应该用 JPNut\ExtendedAuth\ResetsPasswords 替换 Illuminate\Foundation\Auth\ResetsPasswords

扩展

您需要确保

  • 任何 User 模型实现 JPNut\ExtendedAuth\Contracts\Authenticatable
  • 您的 Token 模型实现 JPNut\ExtendedAuth\Contracts\Tokenable

测试

phpunit

许可证

MIT