本文介绍jwt token在laravel中的安装使用,解决token验证的问题php
1、查看laravel版本选定适合本身框架的jwt版本,不一样版本之间会有意想不到的惊喜(坑)laravel
根据本身 laravel
版本不一样使用jwt-auth
版本建议以下:json
Laravel version | jwt-auth version |
---|---|
4.* |
0.3.* 0.4.* |
5.* && <5.5 |
0.5.* |
5.* |
1.0.* |
以上只是参考,本人在laravel5.4也成功使用了1.0.0-rc.3版本下面详细描述下具体的安装以及使用api
经过composer安装的两种方式数组
1>composer require tymon/jwt-auth 1.0.0-rc.3(本人使用的版本)直接在项目目录下执行该命令等待安装便可app
2>打开composer.json在require中添加以下,而后执行composer update便可,可是这样会把composer.json中其余的扩展也一并更新了composer
将jwt加载到项目中以后进行一下配置首先框架
执行命令:ide
php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"
该命令的含义是发布jwt的配置文件,文件位置存储在config下该文件中存储了一系列的jwt的配置例如生存时间,token刷新时间等等建立以后执行命令
php artisan jwt:secret,该命令为建立秘钥在,env文件中能够看到jwt secret
而后在服务容器中建立jwt的服务提供者打开config/app.php在'providers'数组中添加ui
use Tymon\JWTAuth\Contracts\JWTSubject;
class User extends Authenticatable implements JWTSubject
而且添加如下方法
public function getJWTIdentifier() {
return $this->getKey();
}
public function getJWTCustomClaims() {
return [];
}
而后须要更改下咱们的auth.php配置文件由于在路由时要指定何种验证方式
'guards' => [
...
'api' => [
'driver' => 'jwt',
'provider' => 'users',
],
],
更改以后路由中要这样才能生效
Route::middleware('jwt.auth')->get('users', function () {
return auth('api')->user();
});
这样路由就能通过指定的中间件jwt.auth过滤,而后经auth('api)这里指定了验证方式就是对应刚刚讲到的auth.php中的配置项
若是你想让token的验证信息更加温暖,那么你能够捕获token验证的异常具体作法
打开文件在方法开头使用以下代码
app/Exceptions/Handler.phprender
use Symfony\Component\HttpKernel\Exception\UnauthorizedHttpException;
if ($exception instanceof UnauthorizedHttpException) {
$preException = $exception->getPrevious();
if ($preException instanceof
\Tymon\JWTAuth\Exceptions\TokenExpiredException) {
return response()->json(['error' => 'TOKEN_EXPIRED']);
} else if ($preException instanceof
\Tymon\JWTAuth\Exceptions\TokenInvalidException) {
return response()->json(['error' => 'TOKEN_INVALID']);
} else if ($preException instanceof
\Tymon\JWTAuth\Exceptions\TokenBlacklistedException) {
return response()->json(['error' => 'TOKEN_BLACKLISTED']);
}
if ($exception->getMessage() === 'Token not provided') {
return response()->json(['error' => 'Token not provided']);
}
}
每一error都能自定义你本身的提示语
下面是获取token的方法
在控制器中使用use JWTAuth;
读取到用户信息将用户信息做为参数例如