2017-09-26 96 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; 
    } 
}