Ошибка Tymon \ JWTAuth :: toUser: требуется токен

У меня есть API-интерфейс Larvel, который использует Tymon \ JWTAuth для аутентификации пользователя.

Работает нормально.

По некоторым причинам у меня также есть неохраняемый маршрут в web.php:

Route::get('myroute', 'MyController@mymethod');

Код MyController @ mymethod следующий:

$user = JWTAuth::toUser($request->input('token'));

// I tried also this:
// JWTAuth::setToken($request->input('token'));
// $user = JWTAuth::authenticate();

И я вызываю маршрут, используя этот URL-адрес в браузере: /myroute?token=eyJ0eXAiOiJKV1QiLCJhbGci....

Проблема в том, что у меня есть исключение в JWT.php:

Tymon \ JWTAuth \ Exceptions \ JWTException Требуется токен

JWT.php

protected function requireToken()
{
    if (! $this->token) {
        throw new JWTException('A token is required');
    }
}

Как я могу декодировать токен, который передается как параметр URL, а не в заголовке запроса?


person Fabry    schedule 13.06.2018    source источник


Ответы (3)


Если вы используете jwt-auth dev, метод toUser в старой версии сбросит ошибку, как указано выше, попробуйте следующее:

// Get the currently authenticated user
$user = auth()->user();

Если пользователь не аутентифицирован, будет возвращено значение null.

person Tai Ly    schedule 14.01.2019

Вместо того

$user = JWTAuth::toUser($request->input('token'));

Использовать

$user = $this->jwt->User();
person manoj yadav    schedule 01.10.2018

Я решил это с помощью этого кода:

use Namshi\JOSE\SimpleJWS;

$secret = config('jwt.secret');
$jws = SimpleJWS::load($token);
if (!$jws->isValid($secret)) {
   return response()->json([], 401); // unauthorized
} 
$payload = $jws->getPayload();

Однако я бы предпочел напрямую использовать JWTAuth

person Fabry    schedule 13.06.2018
comment
как получить из этого пользовательский объект? - person devmrh; 26.04.2021