簡體   English   中英

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

[英]$request->user() returns null in Laravel 5.5

我遇到了從Illuminate Request($ 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);
}

}

但不幸的是,上述方法無效。 有人能指出我正確的方向嗎?

看來你正在改變一個變量,而不是請求實例,也許你可以試試這個。

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

這是最終的解決方案:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM