如何允许任何用户使用Laravel JWT身份验证访问路由


How to allow any user to access a route with Laravel JWT Authentication?

我的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);
    }
}