mercredi 13 avril 2016

Run Middleware Before Controller's Constructor On Laravel 5.1?

I have a middleware that authenticates a JWT user using tymon/jwt-auth package:

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);
}

Then I have a controller and I want to pass the user from the middleware to the controller.

So I did on the controller:

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

The problem is that $this->user is null, but when I do this on a method of the controller, it's not null.

So:

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

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

So the issue is that __construct is running before the middleware. How can I change that, or do you have another solution?

Update: I'm using dingo/api for routing, maybe it's an error on their side?



via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire