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

时间:2016-08-20 00:39:43

标签: php laravel jwt

我在我的Laravel REST API中使用Tymon / JWT-Auth软件包。在我的routes.php文件中,我可以添加针对未经身份验证的用户的路由以及针对经过身份验证的用户的路由。

未经身份验证的用户的路由会忽略授权标头。但是,如果标题有效,我可以使用可以使用授权用户数据的路由组,如果没有设置或无效,我可以执行其他操作。

有没有办法实现这样的功能,或者是JWTAuth包内置中间件的解决方案?

1 个答案:

答案 0 :(得分:0)

为了解决这个难题,我基于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);
    }
}