$request->user() 在 Laravel 5.5 中返回 null

Posted

技术标签:

【中文标题】$request->user() 在 Laravel 5.5 中返回 null【英文标题】:$request->user() returns null in Laravel 5.5 【发布时间】: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);

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

【问题讨论】:

【参考方案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 在验证之前从令牌中解析用户,但之后它就像一个魅力一样工作。

以上是关于$request->user() 在 Laravel 5.5 中返回 null的主要内容,如果未能解决你的问题,请参考以下文章

如何将request.user / user传递给Django中的消息

Laravel 5:向 $request->all() 添加数据

如何在存储中显示图像?

第三方重定向后,Django request.user 成为 AnonymousUser

Laravel,更新密码,然后将旧密码保存在表格中

follow