Laravel JWT возвращает токен, но возвращает без аутентификации по последующему запросу

У меня все еще возникает проблема, заключающаяся в том, что всякий раз, когда я вхожу в систему, я получаю свой токен jwt, но всякий раз, когда я пытаюсь использовать этот токен для выполнения других запросов по другому маршруту, которые связаны с промежуточным программным обеспечением auth: api, он продолжает возвращать unauthenticated. следовательно, я не могу обращаться с просьбой.

кто-нибудь может помочь

Маршрут выглядит как

Route::prefix('auth')->group(function () {

Route::post('login', [LoginController::class, 'login'])->name('login');
Route::post('refresh', [LoginController::class, 'handleRefreshToken'])->name('refresh');
Route::post('me', [LoginController::class, 'userDetails'])->name("user_details");
});

почему мой контроллер выглядит как

<?PHP

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use App\Http\Requests\Auth\LoginController\LoginValidator;
use App\Traits\SendsApiResponse;
use Illuminate\Http\Response;

class LoginController extends Controller
{
use SendsApiResponse;

/**
 * Create a new AuthController instance.
 *
 * @return void
 */
public function __construct()
{
    $this->middleware('auth:api', ['except' => ['login', 'refresh']]);
}

/**
 * Handles User Login
 * @param LoginValidator $request
 * @return \Illuminate\Http\JsonResponse|mixed
 */
public function login(LoginValidator $request)
{
    try {
        $login_cred = $request->validated();
        $token = auth()->attempt($login_cred);
        if (!$token) {
            return $this->failureResponse("Incorrect UserName and/or Password", Response::HTTP_UNAUTHORIZED);
        }

        return $this->successResponse($this->returnToken($token));
    } catch (\Exception $e) {
        return $this->failureResponse($e->getMessage(), $e->getCode());
    }
}

public function returnToken($token)
{
    return [
        "token" => $token
    ];
}

/**
 * Handle The Refreshing Of Users Token
 * @return \Illuminate\Http\JsonResponse|mixed
 */
public function handleRefreshToken()
{
    try {
        return $this->successResponse($this->returnToken(auth()->refresh($forceForever = true)));
    } catch (\Exception $e) {
        return $this->failureResponse($e->getMessage(), 440);
    }
}

public function userDetails()
{
    return $this->successResponse(auth()->user());
}

}

из всех вышеперечисленных методов работает только вход в систему, остальные - нет.


person Kingsley Akindele    schedule 19.10.2020    source источник
comment
предоставьте код, который вы пробовали.   -  person Sok Chanty    schedule 19.10.2020
comment
код какого типа? пожалуйста, укажите, какую часть моего кода вы хотите видеть, чтобы я мог, в частности, знать, что предоставить   -  person Kingsley Akindele    schedule 19.10.2020
comment
ваш код входа и ваш маршрут.   -  person Sok Chanty    schedule 19.10.2020
comment
с почти нулевой информацией трудно помочь. Возможно, срок действия токена истек, может быть использован неправильный ключ для проверки, возможно, вы ожидаете определенного утверждения (например, aud) в токене, который вы не установили, может быть, что-то еще, .... Как вы создаете токен, и как это проверить?   -  person jps    schedule 19.10.2020
comment
@jps, я просто следую реализации, предложенной в документации по tymon / jwt   -  person Kingsley Akindele    schedule 19.10.2020


Ответы (1)


В зависимости от того, как вы отправляете токен:

Этот пакет всегда возвращает Unauthenticated, если токен отсутствует, срок его действия истек или указан неверно. Добавьте заголовок Authorization с Bearer [your token] к запросу и отправьте его снова, затем проверьте, возвращает ли он по-прежнему Unauthenticated.

Код, обрабатывающий эту логику, содержится в промежуточном программном обеспечении auth:api, но он работает только в том случае, если вы правильно настроили его в файле config/auth.php.

person Miguel Nogueira    schedule 19.10.2020
comment
да, правильно настроил. это довольно загадочно, почему не работает - person Kingsley Akindele; 20.10.2020