tymon jwt 多表认证
laravel版本7.x
“tymon/jwt-auth”: “^1.0”
根据论坛里面https://learnku.com/articles/28881步骤操作
多表认证提示user not found。
auth.php 配置
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
'hash' => false,
],
'member' => [
'driver' => 'jwt',
'provider' => 'members'
],
],
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\User::class,
],
'members' => [
'driver' => 'eloquent',
'model' => App\Models\Member::class,
],
// 'users' => [
// 'driver' => 'database',
// 'table' => 'users',
// ],
],
路由文件
Route::group(['middleware' => ['jwt.role:member', 'jwt.auth']], function () {
Route::post('me', 'MemberController@info');
});
jwt.role中间件是为了区分role为user还是member,代码如下:
public function handle($request, Closure $next, $role = null)
{
try {
// 解析token角色
$token_role = $this->auth->parseToken()->getClaim('role');
} catch (JWTException $e) {
/**
* token解析失败,说明请求中没有可用的token。
* 为了可以全局使用(不需要token的请求也可通过),这里让请求继续。
* 因为这个中间件的责职只是校验token里的角色。
*/
return $next($request);
}
if ($token_role != $role) {
throw new UnauthorizedHttpException('jwt-auth', ApiCode::INVALID_JWT[1]);
}
return $next($request);
}
查询到返回user not found的原因为:
使用members表中i为1的用户数据正常登陆后能返回token值,然后使用此token值返回/admin/me路由(添加了jwt-auth中间件),在user表中如果存在id为1的数据,则验证能通过,并且能获取到member表中id为1的用户数据。
但是如果删除了user表中id为1的数据,jwt-auth这个中间件验证就捕获通过返回user not found。
虽然jwt.role这个中间件能区分不同guard,但是jwt-auth还是使用默认的guard认证的,请问能有什么办法可以让jwt-auth中间件按照自己想使用的guard进行认证。
第一次提问,请多谅解
api的driver换成jwt试一下
加一个
auth()->shouldUse($guard);
,您这里就是