2017-09-26 142 views
2

我在從照明請求($ request-> user())獲取用戶方面存在問題。

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

的PusherBroadcastDriver使用這個,我不能出於顯而易見的原因編輯第三方代碼..

我使用Tymon \ 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

天啊三江源!我怎麼能看到這一點。我不得不稍微修改一下代碼,以便讓jwt在認證之前從令牌解析用戶,但在此之後它像魅力一樣工作。 –

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