Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel JWT身份验证获取用户if令牌_Php_Laravel_Laravel 5_Jwt - Fatal编程技术网

Php Laravel JWT身份验证获取用户if令牌

Php Laravel JWT身份验证获取用户if令牌,php,laravel,laravel-5,jwt,Php,Laravel,Laravel 5,Jwt,我在用拉威尔的包裹。它工作得很好,但似乎用户必须经过身份验证 例如,某些路由不需要身份验证,但如果令牌存在,它仍然应该对用户进行身份验证。根据用户访问的类型,我从API向用户显示的参数可能会有所不同。因此管理员将获得一些额外的参数 现在,它总是会抛出令牌。但它应该像平常一样通过,并且“如果”令牌存在,则处理它 不确定是否需要为此创建自定义中间件 class JWTAuthIfPresent { public function handle($request, Closure $next)

我在用拉威尔的包裹。它工作得很好,但似乎用户必须经过身份验证

例如,某些路由不需要身份验证,但如果令牌存在,它仍然应该对用户进行身份验证。根据用户访问的类型,我从API向用户显示的参数可能会有所不同。因此管理员将获得一些额外的参数

现在,它总是会抛出令牌。但它应该像平常一样通过,并且“如果”令牌存在,则处理它

不确定是否需要为此创建自定义中间件

class JWTAuthIfPresent
{
    public function handle($request, Closure $next)
    {
        if (JWTAuth::getToken()) {
            JWTAuth::parseToken()->authenticate();
        }

        return $next($request);
    }
}
这似乎可行,但不确定现有包中是否有更好的方法或其他方法

编辑:


此外,这不会处理任何令牌问题,如
令牌=
或一些无效或过期的令牌。如果设置了,它仍然可以正常处理令牌。

好的,我可以通过简单地扩展现有的auth来解决这个问题

namespace App\Http\Middleware;

use JWTAuth;
use Closure;
use \Tymon\JWTAuth\Middleware\GetUserFromToken;

class JWTAuthIfPresent extends GetUserFromToken
{
    public function handle($request, Closure $next)
    {
        if (JWTAuth::getToken()) {
            return parent::handle($request, $next);
        }

        return $next($request);
    }
}