Ich habe eine Middleware, die einen JWT Benutzer mit tymon/jwt-auth Paket authentifiziert:Run Middleware vor Controller-Konstruktor auf 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);
}
Dann habe ich einen Controller und ich mag den Benutzer von der Middleware an die Steuerung zu übergeben.
Also habe ich auf dem Controller:
public function __construct()
{
$this->user = \Auth::user();
}
Das Problem ist, dass $this->user
null
ist, aber wenn ich dieses von der Steuerung auf ein Verfahren zu tun, es ist nicht null.
So:
public function __construct()
{
$this->user = \Auth::user();
}
public function index()
{
var_dump($this->user); // null
var_dump(\Auth::user()); // OK, not null
}
Also das Problem ist, dass __construct
vor der Middleware läuft. Wie kann ich das ändern, oder haben Sie eine andere Lösung?
Update: Ich verwende dingo/api für das Routing, vielleicht ist es ein Fehler auf ihrer Seite?
Sie können das nicht tun. Sie haben darüber nachgedacht, wie Sie diesen Benutzer von der Middleware (nicht vom Controller) übergeben können. – num8er
@ num8er Selbst wenn ich den '$ user' Parameter wie folgt übergebe:' $ request-> attributes-> add (compact ('user')); 'Ich bekomme das selbe Ergebnis auf dem Controller, da der Konstruktor vor dem läuft Middleware. (wahrscheinlich Dingo/api Fehler) – HtmHell
Überprüfen Sie meine Antwort – num8er