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

Arr*_*ous 5 php authentication jwt laravel pusher

我在从 Illuminate 请求 ($request->user()) 中获取用户时遇到问题。

 $request->user() // whatever i do this keeps returning null
Run Code Online (Sandbox Code Playgroud)

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

}
Run Code Online (Sandbox Code Playgroud)

中间件:

 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);
}
Run Code Online (Sandbox Code Playgroud)

}

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

小智 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;
}
Run Code Online (Sandbox Code Playgroud)