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を使用していますが、おそらく彼ら側のエラーですか?