codebot / laravel-usub
Laravel 包,用于认证用户替换登录为其他用户。
Requires
- php: ^7.1
Requires (Dev)
- codebot/phpenv: 1.0.*
- orchestra/testbench: ~3.0
- phpunit/phpunit: ^7.3
This package is auto-updated.
Last update: 2024-08-30 01:11:43 UTC
README
关于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_in
和 on_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
命令。