我的Laravel REST API使用的是Tymon/JWT-Auth包。在我的routes.php
文件中,我可以为未认证的用户和已认证的用户添加路由。
未认证用户的路由忽略授权头。然而,我想要一个路由组,可以利用授权的用户数据,如果头是有效的,做其他事情,如果它没有设置或无效。
有没有办法实现这样的功能,或者在JWTAuth包内置的中间件中有一个解决方案?
为了解决这个困境,我基于JWTAuth GetUserFromToken中间件制作了自己的中间件,并将其添加到内核文件中的routeMiddleware数组中。
RouteMiddleware
<?php
namespace App'Http'Middleware;
use Tymon'JWTAuth'Exceptions'JWTException;
use Tymon'JWTAuth'Exceptions'TokenExpiredException;
class NeutralRoute extends 'Tymon'JWTAuth'Middleware'BaseMiddleware
{
/**
* Handle an incoming request.
*
* @param 'Illuminate'Http'Request $request
* @param 'Closure $next
* @return mixed
*/
public function handle($request, 'Closure $next)
{
$token = $this->auth->setRequest($request)->getToken();
if($token){
try {
$user = $this->auth->authenticate($token);
} catch (TokenExpiredException $e) {
return $this->respond('tymon.jwt.expired', 'token_expired', $e->getStatusCode(), [$e]);
} catch (JWTException $e) {
return $this->respond('tymon.jwt.invalid', 'token_invalid', $e->getStatusCode(), [$e]);
}
if($user){
$this->events->fire('tymon.jwt.valid', $user);
}
}
return $next($request);
}
}