2017-09-26 17 views
2

イルミネートリクエスト($ request-> user())からユーザーを取得する際に問題があります。

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

PusherBroadcastDriverがこれを使用すると、私は明白な理由のために、サードパーティのコードを編集することはできません。..

私はトークンを生成し、自分のアプリケーションでユーザーを認証するためにタイモン\ JWTを使用しています。私は現在、

認証サービスプロバイダー以下の(チェックコード)を実行しようとしました:

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

} 

ミドルウェア:

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

}

しかし残念ながら上記動作しませんでした。 誰かが私を正しい方向に向けることができますか?

答えて

0

あなたは変数を変更しているようですが、要求インスタンスではなく、おそらくこれを試すことができます。

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

ああ神様ありがとう!どのように私はそれを見ている可能性があります。私はコードを少し修正して、認証される前にユーザーをトークンから解析するようにしなければなりませんでしたが、それ以降は魅力的に機能しました。 –

0

これが最終的な解決策である :

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; 
    } 
} 
関連する問題