codebot/laravel-usub

Laravel 包,用于认证用户替换登录为其他用户。

0.1.7 2020-05-03 10:45 UTC

README

Build Status

关于laravel-usub

Laravel 包,用于认证用户替换登录为其他用户。当您的客户说“作为一名管理员,我想以所选用户身份登录并执行操作,而无需输入密码,并且希望通过单击返回我的管理员仪表板”时,您会发现此包很有用。

安装

  • 使用 composer 安装包 - 运行命令 composer require codebot/laravel-usub:0.1.*

  • 使用 php artisan vendor:publish --tag=laravel-usub 命令发布供应商。您将获得已发布的配置文件 config/usub.php、中间件 app/Http/Middleware/UsubSignIn.php、命令 app/Console/Commands/ClearUsubTokens.php、目录 views/vendor/usub 和创建 usub_tokens 表的迁移。

  • 运行 php artisan migrate 创建 usub_tokens 表。

  • 如果自动发现不起作用,则通过在 config/app.php 文件中将 Usub\Core\UsubServiceProvider::class 添加到提供者中注册服务提供者。

  • UsubSignIn 中间件添加到 App\Http\Kernel.php 类中的 $routeMiddleware 数组。

您需要完全实现 UsubSignIn 中间件以实现权限。例如

    public function handle( $request, Closure $next )
    {
        if ( !$request->user()->hasRole( 'admin' ) )
        {
            abort( 401 );
        }

        return $next( $request );
    }

配置

过期时间 - Usub 令牌过期时间(分钟)。

长度 - 生成的 usub 令牌长度。

登录时重定向到 - 用户登录时默认 URL,除非请求中重写了 redirect_to_on_sign_in 键,例如通过隐藏输入字段。

登出时重定向到 - 用户登出时默认 URL,除非请求中重写了 redirect_to_on_sign_out 键,例如通过隐藏输入字段。

令牌过期时重定向到 - 令牌 cookie 过期时用户将被重定向到的 URL。

登出时忘记 cookie - 数组,其中包含在登出和 usub 令牌过期时将从浏览器中删除的 cookie 名称。

如果需要,您可以在 .env 文件中更改配置。

USUB_TOKEN_EXPIRATION=120
USUB_TOKEN_LENGTH=100
USUB_REDIRECT_TO_ON_SIGN_IN="/"
USUB_REDIRECT_TO_ON_SIGN_OUT="/"
USUB_REDIRECT_TO_ON_COOKIE_EXPIRATION="/"

使用方法

安装包后,以下路由被注册

  • POST /usub/sign-in - 用于以给定的用户 ID 登录。

    • 字段
      • user2 (必需)
      • 登录时重定向到 (可选,一旦设置 - 覆盖 redirect_to_on_sign_in 配置变量 )
      • 登出时重定向到 (可选,一旦设置 - 覆盖 redirect_to_on_sign_out 配置变量 )
  • POST /usub/sign-out - 用于“重新登录”到管理员账户。

    • 无需指定任何字段。

用于登录为特定用户的 HTML 表单示例

@if( \Auth::user()->hasRole('admin') )
    @include('vendor.usub.partials.sign_in', [
        'user_id' => $user->id,
        'on_sign_in' => route('home'),
        'on_sign_out' => route('backend.user.index')
    ])
@endif

如果您未指定 on_sign_inon_sign_out 值,则将使用 config/usub.php 配置文件中的默认值。

用于登出并返回到管理员仪表板(或您需要的任何页面)的 HTML 表单示例

@if( \Illuminate\Support\Facades\Cookie::get('usub_token') )
    <li class="nav-item">
        <form action="{{ route('usub.sign_out') }}" method="post">
            @csrf
            <button type="submit" class="btn btn-primary">Back to Admin</button>
        </form>
    </li>
@endif

清理

要删除 usub_tokens 数据库表中的过期令牌,可以使用 php artisan usub:clear 命令。