PHP code example of lsxiao / jwt-auth
1. Go to this page and download the library: Download lsxiao/jwt-auth library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
lsxiao / jwt-auth example snippets
return [
/*
|--------------------------------------------------------------------------
| HMAC 签名秘钥
|--------------------------------------------------------------------------
|
| HMAC 签名秘钥是用来为token进行HMAC签名的,必须在.env文件中设置。
|
*/
'secret_key' => env('JWT_SECRET_KEY'),
/*
|--------------------------------------------------------------------------
| RSA 签名私钥
|--------------------------------------------------------------------------
|
| RSA 签名私钥是用来为token进行RSA签名的,必须在.env文件中设置。
|
*/
'private_secret_key' => env('JWT_PRIVATE_SECRET_KEY'),
/*
|--------------------------------------------------------------------------
| RSA 签名公钥
|--------------------------------------------------------------------------
|
| RSA 签名公钥是用来为token进行RSA签名解密的,必须在.env文件中设置。
|
*/
'public_secret_key' => env('JWT_PUBLIC_SECRET_KEY'),
/*
|--------------------------------------------------------------------------
| Token 有效期
|--------------------------------------------------------------------------
|
| 指定token的有效时间(单位分钟),默认1小时。
|
*/
'ttl' => env('JWT_TTL', 60),
/*
|--------------------------------------------------------------------------
| Token 刷新有效期
|--------------------------------------------------------------------------
|
| 指定token过期后,多长一段时间内,使用过期的token能够刷新。默认为3周
|
*/
'refresh_ttl' => env('JWT_REFRESH_TTL', 30240),
/*
|--------------------------------------------------------------------------
| JWT 算法ID
|--------------------------------------------------------------------------
|
| Token HMAC签名的HASH算法
| 对称算法:
| HS256, HS384, HS512
| 非对称算法,需提供公私钥:
| RS256, RS384, RS512
*/
'algorithm_id' => env('JWT_ALGORITHM', \Lsxiao\JWT\Singer\HMAC::DEFAULT_ALGO_ID),
/*
|--------------------------------------------------------------------------
| 指定Token在某时间之前无法使用
|--------------------------------------------------------------------------
|
| 指定一个时间增量(单位秒),在此签发时间+此事件增量时间之前,Token都不能使用
|
*/
'not_before=>' => env('JWT_NOT_BEFORE', 0),
/*
|--------------------------------------------------------------------------
| 刷新Token次数差值
|--------------------------------------------------------------------------
|
| 最新刷新次数会缓存在Server,如果客户端的token刷新次数与Server缓存相差大于此值,就会判定无效Token
|
*/
'refresh_diff_limit=>' => env('JWT_REFRESH_DIFF_LIMIT', 2),
/*
|--------------------------------------------------------------------------
| 黑名单宽限时间,单位秒
|--------------------------------------------------------------------------
|
| 每次刷新后,Token会被加入黑名单,在高并发的情况下,后续请求Token会无效,当设置宽限时间后,
| Token刷新后,加入黑名单的Token只要处于宽限时间内,则是有效的。
|
*/
'blacklist_grace_time' => env('JWT_BLACK_LIST_GRACE_TIME', 30)
];
return [
'defaults' => [
'guard' => env('AUTH_GUARD', 'api'),
],
'guards' => [
'api' => ['driver' => 'jwt'],//这里必须是jwt,由JWTGuard驱动
],
'providers' => [
//
],
];
public function boot()
{
$this->app->configure('jwt');
$this->app['auth']->viaRequest('api', function ($request) {
$token = \Lsxiao\JWT\Token::fromRequest($request);
if (!empty($token) && $token->isValid()) {
$userid = $token->getClaim('sub')->getValue();
return User::find($userid);
}
});
}
public function login(Request $request)
{
//通过user返回一个Token
$credentials = $request->only('email', 'password');
$user = User::where('email', $credentials[0])->where('password', $credentials[1])->first();
$token = \Lsxiao\JWT\Token::fromUser($user);
return response()->json(['token' => $token]);
}
public function login(Request $request)
{
//从请求取出证书,也就是邮件密码
$token = \Lsxiao\JWT\Token::refreshToken($request);
if (!$token) {
throw new TokenInvalidException("refresh failed");
}
return response()->json(['token' => $token]);
}
public function handle($request, Closure $next, $guard = null)
{
if ($this->auth->guard($guard)->guest()) {
return response('Unauthorized.', 401);
}
$response = $next($request);
// RefreshToken : reset HTTP Response Header
\Lsxiao\JWT\Token::refreshToken($request, $response);
return $response;
}
bash
php artisan vendor:publish
jwt.php
auth.php