#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
заголовка для последовательного запроса будет работать.