Почему святилище промежуточного программного обеспечения возвращает ошибку (несанкционированный 401) в Laravel?

#laravel #laravel-sanctum

#laravel #laravel-sanctum

Вопрос:

Я хочу выполнить аутентификацию в SPA с помощью laravel sanctum. И я установил среду, как показано ниже. Но после того, как я вошел в систему и сделал следующий запрос api, произошла ошибка. Почему?. Первый запрос вернул X-CSRF-ТОКЕН . И, насколько я знаю, axios автоматически отправляет X-CSRF-ТОКЕН после входа в систему. Пожалуйста, дайте мне совет.

api.php

 Route::middleware('auth:sanctum')->get('/sanctum/test', function (Request $request) {
  return 'Nice!';
});

Route::post('/login', 'AuthLoginController@login');
  

Метод входа в систему LoginController

   public function login(Request $request)
  {
    $this->validateLogin($request);

    $user = User::where('number', $request->login_id)->orWhere('email', $request->login_id)->first();

    if (!$user || !Hash::check($request->password, $user->password)) {
      throw ValidationException::withMessages([
        'login_id' => ['uncorrect'],
      ]);
    } else {
      return 'success';
    }
}

  

Sign_in.tsx

   function Submit() {
    axios.get('/sanctum/csrf-cookie').then(response => {
      console.log(response);
    axios
      .post("/api/login", {
        login_id: loginID,
        password: password,
      })
      .then(response => {
        console.log(response);
        axios.get('/api/sanctum/test').then(res => {
        console.log(res);
       })
      })
   });
  }
  

Karnel.php

   protected $middlewareGroups = [
    'web' => [
      AppHttpMiddlewareEncryptCookies::class,
      IlluminateCookieMiddlewareAddQueuedCookiesToResponse::class,
      IlluminateSessionMiddlewareStartSession::class,
      // IlluminateSessionMiddlewareAuthenticateSession::class,
      IlluminateViewMiddlewareShareErrorsFromSession::class,
      AppHttpMiddlewareVerifyCsrfToken::class,
      IlluminateRoutingMiddlewareSubstituteBindings::class,
    ],

    'api' => [
      EnsureFrontendRequestsAreStateful::class,
      'throttle:60,1',
      IlluminateRoutingMiddlewareSubstituteBindings::class,
    ],
  ];

  

database.php

 APP_NAME=Laravel
APP_ENV=local
APP_KEY=secret
APP_DEBUG=true
APP_URL=http://localhost

LOG_CHANNEL=stack

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=secret
DB_USERNAME=root
DB_PASSWORD=secret

SESSION_DRIVER=file
SANCTUM_STATEFUL_DOMAINS=localhost:8000
SESSION_DOMAIN=localhost
  

введите описание изображения здесь

Ответ №1:

В Route::middleware('auth:sanctum') Authorization:<Bearer-Token> заголовке needs. Настройка Authorization заголовка для последовательного запроса будет работать.