laravel 8 -> 使用 jwt 和邮递员授权
Posted
技术标签:
【中文标题】laravel 8 -> 使用 jwt 和邮递员授权【英文标题】:laravel 8 -> authorization with jwt and postman 【发布时间】:2021-06-24 02:28:53 【问题描述】:我正在使用 Laravel8 构建一个 API 并使用 postman,另外我使用 JWT 进行身份验证并希望授权创建新帖子,我希望只有当用户是管理员或作者时才能创建新帖子,所以我创建了一个中间件AdminLevelAuthorization
,并在内核中将其添加为'auth.level'
所以我把这个中间件作为我的路由放在 api.php 中:Route::apiResource('posts' , PostController::class)->middleware('auth.level:admin,author');
在邮递员中我登录并保存了我的令牌,我只是不知道如何使用这个令牌进行授权
当我在邮递员和授权部分转到这条路线http://localhost:8000/api/posts
时,持有者令牌类型我在令牌字段中输入我的令牌,所以它说:
"You are unauthorized to access this resource"
我不知道我输入令牌是错还是我的中间件有问题
这是我的中间件:
class AdminLevelAuthorization
public function handle($request, Closure $next, ...$levels)
try
//Access token from the request
$token = JWTAuth::parseToken();//Try authenticating user
$user = $token->authenticate();
catch (TokenExpiredException $e)
//Thrown if token has expired
return $this->unauthorized('Your token has expired. Please, login again.');
catch (TokenInvalidException $e)
//Thrown if token invalid
return $this->unauthorized('Your token is invalid. Please, login again.');
catch (JWTException $e)
//Thrown if token was not found in the request.
return $this->unauthorized('Please, attach a Bearer Token to your request');
//If user was authenticated successfully and user is in one of the acceptable levels, send to next request.
if ($user && in_array($user->levels, $levels))
return $next($request);
return $this->unauthorized();
private function unauthorized($message = null)
return response()->json([
'message' => $message ? $message : 'You are unauthorized to access this resource',
'success' => false
], 401);
感谢您的帮助:)
【问题讨论】:
由于您的unauthorized
方法在没有消息的情况下被调用,因此您的用户似乎不拥有 $levels
。假设$levels
和$user->levels
都是数组,您需要执行不同的级别验证,因为in_array($array,$array2)
不起作用。如果$user->levels
是一个字符串,你可能应该仔细检查你的代码逻辑是否真的正常工作
omfg T_T 看看我的愚蠢错误 :") $user->levels 是问题。它必须是 $user->level.. 非常感谢 :"))))
【参考方案1】:
问题出在s
,对于user->levels
,它必须是$user->level
【讨论】:
以上是关于laravel 8 -> 使用 jwt 和邮递员授权的主要内容,如果未能解决你的问题,请参考以下文章
供应商/lcobucci/jwt/src/Configuration.php 上的 Laravel 8 错误
我有由 laravel 8 创建的项目,并且我将 JWT 用于我的 API,现在由于 JWT 版本我无法安装推送器