- 一般对外提供api接口服务都需要对使用的身份进行鉴权,需要对权限方面进行控制
- 这里我们使用JWTAuth来进行完成
配置JWTAuth
composer require tymon/jwt-auth 0.5.*
打开confi/app.php进行配置
在providers
中配置
\Tymon\JWTAuth\Providers\JWTAuthServiceProvider::class,
在aliases
配置
‘JWTAuth’=> Tymon\JWTAuth\Facades\JWTAuth::class,
‘JWTFactory’=> Tymon\JWTAuth\Facades\JWTFactory::class,
生成配置文件config/jwt.php,文件中可以进行配置
php artisan vendor:publish --provider=“Tymon\JWTAuth\Providers\JWTAuthServiceProvider”
生成随机密匙
php artisan jwt:generate
Laravel version |
jwt-auth version |
4.* |
0.3.* 0.4.* |
5.*&& <5.5 |
0.5.* |
5.* |
1.0.* |
默认使用
- 在
api
路由文件中写上生成密匙路由,模拟用户登录使用接口,使用的用户表为默认的user
表
Route::post(‘apiauth’,‘ApiController@auth’);
Route::get(‘getauth’,‘ApiController@getAuth’);
文件ApiController.php
<?php
namespace App\Http\Controllers\Admin\api;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Tymon\JWTAuth\Exceptions\JWTException;
use Tymon\JWTAuth\Facades\JWTAuth;
class ApiController extends Controller
{
public function auth(Request $request)
{
$cds = $request->only('name', 'password');
try {
if (!$token = JWTAuth::attempt($cds)) {
return response()->json(['error' => 'invalid_credentials'], 401);
}
} catch (JWTException $e) {
return response()->json(['error' => 'could_not_create_token'], 500);
}
return response()->json(compact('token'));
}
public function getAuth(Request $request)
{
try {
if (!$user = JWTAuth::parseToken()->authenticate()) {
return response()->json(['user_not_found'], 404);
}
} catch (TokenExpiredException $e) {
return response()->json(['token_expired'], $e->getStatusCode());
}catch (TokenInvalidException $e){
return response()->json(['token_invalid'], $e->getStatusCode());
}catch (JWTException $e){
return response()->json(['token_absent'], $e->getStatusCode());
}
return response()->json(compact('user'));
}
}
我们先访问登录接口获取token
,使用user表里面的用户

我们使用另外的要验证登录用户的接口来检测
访问方式需要在headers里进行配置,如下
key:Authorization vaule:Bearer+空格+token

这里我们通过登录路接口的的token获取到了用户的信息,我们可以根据这个信息获取到用户的权限等信息,封装成一个权限控制的中间件来对用户权限进行控制
api用户表情况
- 很多情况接口的用户并不是默认的user用户表,是我们自己新建的用户表,JWTAuth默认的是对默认的user表进行信息鉴权,我们需要对配置信息进行修改
在config/auth.php用户登录的配置都为user表,我们不能直接修改这张表的配置,修改后会影响正常的web端。我们需要动态的修改这些数据,对需要的路由进行数据修改,我们可以使用中间件去完成
- 新建中间件,并写上加入到相对应的路由上,我们就能使用api对应的用户表进行数据校验
public function handle($request, Closure $next)
{
config(['jwt.user' => 'App\Models\hwtc\Apiuser']);
config(['auth.providers.users.model' => \App\Models\hwtc\Apiuser::class]);
return $next($request);
}