2017-09-26 1 views
2

J'ai des problèmes avec l'obtention d'une requête Illuminate ($ request-> user()).

$request->user() // whatever i do this keeps returning null 

Le PusherBroadcastDriver utilise et je ne peux pas modifier le code tiers pour des raisons évidentes ..

J'utilise Tymon \ JWT pour générer des jetons et d'authentifier les utilisateurs avec mon application. Je suis actuellement essayé de faire le (code de vérification) suivant

AUTHENTIFICATION PRESTATAIRE:

public function boot() 
{ 
    $this->registerPolicies(); 

    Auth::extend('jwt', function ($app, $name, array $config) { 
     return new JWTGuard($app['tymon.jwt'], 
      Auth::createUserProvider($config['provider']), 
      $app['request']); 
    }); 

} 

INTERGICIEL:

public class JWTRefreshMiddleware extends RefreshToken 
{ 
/** 
* Handle an incoming request. 
* 
* @param \Illuminate\Http\Request $request 
* @param \Closure $next 
* 
* @throws \Symfony\Component\HttpKernel\Exception\UnauthorizedHttpException 
* 
* @return mixed 
*/ 
public function handle($request, Closure $next) 
{ 
    $response = parent::handle($request, $next); 
    $this->addUserToRequest(); 
    return $response; 
} 

private function addUserToRequest() 
{ 
    $request = app('request'); 
    $user = User::find(JWTAuth::getPayload()['user_id']); 
    $request->merge(['user' => $user]); 
    $request->setUserResolver(function() use ($user) { 
     return $user; 
    }); 
    Auth::setUser($user); 
} 

}

Mais malheureusement, le ne fonctionne pas au-dessus. Quelqu'un peut-il me diriger dans la bonne direction?

Répondre

0

Il semble que vous modifiez une variable, pas l'instance de demande, peut-être que vous pouvez essayer cela.

public function handle($request, Closure $next) 
{ 
    $response = parent::handle($this->addUserToRequest($request), $next); 

    return $response; 
} 

private function addUserToRequest($request) 
{ 
    $user = User::find(JWTAuth::getPayload()['user_id']); 
    $request->merge(['user' => $user]); 
    $request->setUserResolver(function() use ($user) { 
     return $user; 
    }); 
    Auth::setUser($user); 
    return $request; 
} 
+0

Oh mon dieu merci! comment aurais-je pu regarder par-dessus. J'ai dû modifier un peu le code pour que jwt analyse l'utilisateur du jeton avant qu'il ne s'authentifie, mais après cela il a fonctionné comme un charme. –

0

Ceci est la solution finale:

class JWTRefreshMiddleware extends RefreshToken 
{ 
/** 
* Handle an incoming request. 
* 
* @param \Illuminate\Http\Request $request 
* @param \Closure $next 
* 
* @throws \Symfony\Component\HttpKernel\Exception\UnauthorizedHttpException 
* 
* @return mixed 
*/ 
public function handle($request, Closure $next) 
{ 
    $response = parent::handle($this->addUserToRequest($request), $next); 
    return $response; 
} 

private function addUserToRequest(\Illuminate\Http\Request $request): \Illuminate\Http\Request 
{ 
    $user = User::find(JWTAuth::manager()->decode(JWTAuth::getToken())['user_id']); 
    $request->merge(['user' => $user]); 
    $request->setUserResolver(function() use ($user) { 
     return $user; 
    }); 
    Auth::setUser($user); 

    return $request; 
    } 
}