7

tymon/jwt-authパッケージを使用して JWT ユーザーを認証するミドルウェアがあります。

public function handle($request, \Closure $next)
{
    if (! $token = $this->auth->setRequest($request)->getToken()) {
        return $this->respond('tymon.jwt.absent', 'token_not_provided', 400);
    }

    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) {
        return $this->respond('tymon.jwt.user_not_found', 'user_not_found', 404);
    }

    $this->events->fire('tymon.jwt.valid', $user);

    return $next($request);
}

次に、コントローラーがあり、ユーザーをミドルウェアからコントローラーに渡したいと思います。

だから私はコントローラーでやった:

public function __construct()
{
    $this->user = \Auth::user();
}

問題はそれ$this->userですがnull、コントローラーのメソッドでこれを行うと、null ではありません。

そう:

public function __construct()
{
    $this->user = \Auth::user();
}

public function index()
{
    var_dump($this->user); // null
    var_dump(\Auth::user()); // OK, not null
}

問題は__construct、ミドルウェアの前に実行されていることです。どうすればそれを変更できますか、または別の解決策がありますか?

更新:ルーティングにdingo/apiを使用していますが、おそらく彼ら側のエラーですか?

4

2 に答える 2

1

ルートでミドルウェアを使用する必要があります

Route::middleware('jwt.auth')->group(function() {
// your routes 
});
于 2020-06-19T17:20:08.990 に答える