atarek / jwt
基于laravel框架的Jwt token身份验证
This package is auto-updated.
Last update: 2024-09-06 10:23:45 UTC
README
此包用于处理laravel项目中基于令牌的身份验证。它使用两种类型的令牌:访问令牌和刷新令牌。当用户成功认证时,都会生成这两种令牌。它还支持多表认证。
此包仅支持EloquentUserProvider,其他提供者将无法工作
安装
您可以通过composer安装它
composer require atarek\jwt
然后,将JwtServiceProvider添加到app.php中的提供者列表中
'providers' => [
// ...
Atarek\Jwt\Providers\JwtServiceProvider::class,
//...
],
接下来,运行以下命令以发布包
php artisan vendor:publish --provider="Atarek\Jwt\Providers\JwtServiceProvider"
用法
将auth.php守卫驱动程序配置为jwt
'api' => [
'driver' => 'jwt',
'provider' => 'users',
],
provider_name必须与auth.php中的提供者名称匹配
<?php
return [
'routes' => [
'prefix' => [
// provider_name => url_prefix
// 'users' => 'api/users/actions',
],
'controller' => [
// provider_name => controller_name
// 'users' => \Atarek\Jwt\Controllers\AuthController::class,
],
],
'encode_secret' => false,
'access' => [
'expiration_time' => '+1 hour',
'env_secret' => env('ACCESS_TOKEN_SECRET'),
],
'refresh' => [
'expiration_time' => '+1 day',
'env_secret' => env('REFRESH_TOKEN_SECRET')
]
];
在您的laravel .env文件中添加以下两个密钥
ACCESS_TOKEN_SECRET=xxxx
REFRESH_TOKEN_SECRET=yyyy
您必须在您的Authenticatable模型上实现TokenSubject合约
<?php
namespace App;
use Atarek\Jwt\Core\Contracts\TokenSubject;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable implements TokenSubject
{
public function addClaims($tokenType):array
{
/*
* where you add additional custom claims to the token
* $tokenType passed is either access or refresh if
* custom creation needed is based on tokenType
*/
return [];
}
public function getProvider():string
{
// must match the auth.php provider
return 'users';
}
public function getIdentifier():string
{
// user id
return $this->getAuthIdentifier();
}
}
默认的Atarek\Jwt\Controllers\AuthController::class包含四个处理令牌身份验证和路由的方法。
route_prefix/auth, @authenticate验证请求凭证并返回访问令牌和刷新令牌。
route_prefix/me, @user返回从授权令牌获取的当前用户。
route_prefix/revoke, @revoke将授权令牌加入黑名单。
reoute_prefix/refresh, @refresh返回新的访问令牌,您只能使用刷新令牌进行刷新。
中间件
将has.access中间件添加到验证传入请求中
Route::get('do-something','ThingsController@doSomthing')->middleware('has.access');
用户
然后可以从Auth Facade访问用户$user = Auth::user();
扩展AuthController
您可以通过扩展默认的 Atarek\Jwt\Controllers\AuthController::class并添加返回响应之前的额外逻辑来扩展它
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Atarek\Jwt\Controllers\AuthController;
class UserController extends AuthController
{
public function authenticate(Request $request, $callBack = null)
{
return parent($request, function($accessToken, $refreshToken){
// do stuff here
// Auth::user()->doStuff();
return response()->json([
'access'=>$accessToken,
'refresh'=>$refreshToken
]);
});
}
}
贡献
欢迎拉取请求。对于主要更改,请首先创建一个问题来讨论您想要更改的内容。
请确保适当更新测试。