【问题标题】:$request->user() returns null in Laravel 5.5$request->user() 在 Laravel 5.5 中返回 null
【发布时间】:2018-03-08 00:59:09
【问题描述】:

我在从 Illuminate 请求 ($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);
}

}

但不幸的是,上述方法不起作用。 有人能指出我正确的方向吗?

【问题讨论】:

    标签: php laravel authentication jwt pusher


    【解决方案1】:

    这是最终的解决方案:

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

    【讨论】:

      【解决方案2】:

      看来你是在改变一个变量,而不是请求实例,也许你可以试试这个。

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

      【讨论】:

      • 天哪,谢谢!我怎么可能看过那个。我不得不稍微修改一下代码,让 jwt 在验证之前从令牌中解析用户,但之后它就像一个魅力一样工作。
      猜你喜欢
      • 1970-01-01
      • 2018-04-21
      • 2022-01-27
      • 2022-06-15
      • 2016-11-08
      • 2019-09-20
      • 2016-05-13
      • 2020-08-14
      • 2019-08-11
      相关资源
      最近更新 更多