zoran-wang / jwt-auth-guard
为 Laravel 或 Lumen 设计的 jwt 认证保护器,版本 5+
Requires
- php: >=7.0.0
- illuminate/support: ^5.0|^6.0|^7.0|^8.0
- tymon/jwt-auth: ^1.0
This package is not auto-updated.
Last update: 2024-09-20 19:30:07 UTC
README
JWT Auth Guard 是一个 Laravel & Lumen 包,允许您使用
jwt作为应用程序中认证保护器的驱动。保护器使用
tymon/jwt-auth包进行认证和令牌处理。
要求
- Laravel 或 Lumen 安装。
- tymon/jwt-auth
^0.5.12包设置和配置。
安装前
首先安装并设置 tymon/jwt-auth 包。
$ composer require tymon/jwt-auth:^0.5.12
完成设置后,配置它并安装此包。
安装
通过 Composer
$ composer require zoran-wang/jwt-auth-guard
添加服务提供者
Laravel
打开 config/app.php 文件,并在底部将以下内容添加到 providers 数组中:
Zoran\JwtAuthGuard\JwtAuthGuardServiceProvider::class
Lumen
打开 bootstrap/app.php 文件并注册服务提供者
$app->register(Zoran\JwtAuthGuard\JwtAuthGuardServiceProvider::class);
用法
打开您的 config/auth.php 配置文件,并在任何保护器的驱动程序下替换为 jwt-auth。确保您还设置了与数据库通信的保护器的 provider。
设置保护器驱动程序
// config/auth.php 'guards' => [ 'api' => [ 'driver' => 'jwt-auth', 'provider' => 'users' ], // ... ], 'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\User::class, ], 'users' => [ 'driver' => 'database', 'table' => 'users', ], 'users' => [ 'driver' => 'repository', 'repository' => App\Repositories\UserEloquentRepository::class, ], ],
中间件使用
保护路由的中间件
Route::get('api/content', ['middleware' => 'auth:api', 'uses' => 'ContentController@content']);
保护控制器的中间件
<?php namespace App\Http\Controllers; class ContentController extends Controller { public function __construct() { $this->middleware('auth:api'); } }
注意:以下示例假设您已在 config/auth.php 文件中设置了名为 api 的保护器,其驱动程序为 jwt-auth,如上文中“设置保护器驱动程序”部分所述。
以下使用示例假设您已将默认认证保护器设置为使用
jwt-auth驱动程序。您也可以在调用任何方法之前显式定义保护器,只需在前面加上
Auth::guard('api')即可。示例:
Auth::guard('api')->user()
尝试认证并返回令牌
// This will attempt to authenticate the user using the credentials passed and returns a JWT Auth Token for subsequent requests. $token = Auth::attempt(['email' => 'user@domain.com', 'password' => '123456']);
通过 ID 一次性认证
if(Auth::onceUsingId(1)) { // Do something with the authenticated user }
通过凭据一次性认证
if(Auth::once(['email' => 'user@domain.com', 'password' => '123456'])) { // Do something with the authenticated user }
验证凭据
if(Auth::validate(['email' => 'user@domain.com', 'password' => '123456'])) { // Credentials are valid }
检查用户是否已认证
if(Auth::check()) { // User is authenticated }
检查用户是否是访客
if(Auth::guest()) { // Welcome guests! }
注销已认证用户
Auth::logout(); // This will invalidate the current token and unset user/token values.
通过 ID 生成 JWT 认证令牌
$token = Auth::generateTokenById(1); echo $token;
获取已认证用户
一旦通过中间件进行用户认证,您可以通过以下方式访问其详细信息:
$user = Auth::user();
您也可以使用令牌本身手动访问用户信息
$user = Auth::setToken('YourJWTAuthToken')->user();
获取已认证用户的 ID
$userId = Auth::id();
刷新过期的令牌
虽然建议您使用包提供的中间件进行刷新,但如果您愿意,您也可以使用此方法手动刷新。
刷新请求中传递的过期的令牌
$token = Auth::refresh();
刷新传递的过期令牌
Auth::setToken('ExpiredToken')->refresh();
使令牌无效
使请求中传递的令牌无效
$forceForever = false; Auth::invalidate($forceForever);
通过手动设置使令牌无效
$forceForever = false; Auth::setToken('TokenToInvalidate')->invalidate($forceForever);
获取令牌
$token = Auth::getToken(); // Returns current token passed in request.
获取令牌有效载荷
此方法将解码令牌并返回其原始有效载荷。
获取请求中传递的令牌的有效载荷
$payload = Auth::getPayload();
手动获取给定令牌的有效载荷
$payload = Auth::setToken('TokenToGetPayload')->getPayload();