У меня есть промежуточное ПО, которое аутентифицирует пользователя JWT с помощью пакета tymon / jwt-auth:
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
, но когда я делаю это в методе контроллера, он не равен нулю.
So:
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 для маршрутизации, возможно, это ошибка на их стороне?
$user
следующим образом:$request->attributes->add(compact('user'));
Я получаю тот же результат на контроллере, потому что конструктор запускается до промежуточного программного обеспечения. (возможно, ошибка dingo / api) - person HTMHell   schedule 13.04.2016