У меня есть промежуточное программное обеспечение, что подтверждает подлинность пользователя JWT с помощью tymon/jwt-auth пакет:Запуск промежуточного программного обеспечения перед конструктором контроллера на Laravel 5.1?
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
, но когда я делаю это по методу контроллера, это не нуль.
Итак:
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 для маршрутизации, может быть, это ошибка на их стороне?
Вы не можете сделать это. Вы подумали о том, как передать этого пользователя из промежуточного программного обеспечения (а не из контроллера). – num8er
@ num8er Даже когда я передаю параметр '$ user' следующим образом:' $ request-> attributes-> add (compact ('user')); 'Я получаю тот же результат на контроллере, потому что конструктор работает до промежуточное программное обеспечение. (возможно, ошибка dingo/api) – HtmHell
проверить мой ответ – num8er