Несоответствие CSRF nuxt 3 – laravelPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Несоответствие CSRF nuxt 3 – laravel

Сообщение Anonymous »

У меня есть NUXT3 laravel10 и приложение Sanctum на локальном хосте, я буду использовать режим SSR
я пытаюсь войти через API, используя метод UseFetch nuxt
{сообщение: «Несоответствие токена CSRF.», исключение: «Symfony \Component\HttpKernel\Exception\HttpException",…}
я получаю код состояния 419 каждый раз
переменная токена не равна нулю
env.php
BROADCAST_DRIVER=log
CACHE_DRIVER=file
FILESYSTEM_DISK=local
QUEUE_CONNECTION=sync
SESSION_DRIVER=cookie // i set it to cookie
SESSION_LIFETIME=120
MEMCACHED_HOST=127.0.0.1

kernal.php
protected $middleware = [
// \App\Http\Middleware\TrustHosts::class,
\App\Http\Middleware\Cors::class,
\App\Http\Middleware\TrustProxies::class,
\Illuminate\Http\Middleware\HandleCors::class,
\App\Http\Middleware\PreventRequestsDuringMaintenance::class,
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
\App\Http\Middleware\TrimStrings::class,
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
];

'api' => [
\Illuminate\Session\Middleware\StartSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\App\Http\Middleware\Cors::class,
\Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
\Illuminate\Routing\Middleware\ThrottleRequests::class.':api',
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],

config/cros.php
'paths' => ['api/*', 'sanctum/csrf-cookie'],

'allowed_methods' => ['*'],

'allowed_origins' => ['*','http://localhost:3000'],

'allowed_origins_patterns' => [],

'allowed_headers' => ['*'],

'exposed_headers' => [],

'max_age' => 0,

'supports_credentials' => true,


config/sanctum.php
'stateful' => explode(',', env('SANCTUM_STATEFUL_DOMAINS', sprintf(
'%s%s',
'localhost,localhost:3000,127.0.0.1,127.0.0.1:8000,::1',
Sanctum::currentApplicationUrlWithPort()
))),

во внешнем интерфейсе
store/auth.js
async function signIn() {
// Fetch the CSRF token cookie
try {
await useFetch("http://localhost:8000/sanctum/csrf-cookie", {
credentials: "include",
});

// Get the CSRF token from the cookie
const token = getCookie("XSRF-TOKEN");

if (!token) {
console.error('CSRF token not found');
return;
}

// Set CSRF tokens in cookies (if needed)
setCookie('X-CSRF-TOKEN', token);
setCookie('X-XSRF-TOKEN', token);

// Perform login request
const res = await useFetch(backendUrl + "/login", {
credentials: "include",
method: 'POST',
mode: 'cors',
body: JSON.stringify({
username: 'kminchelle',
password: '0lelplR',
}),
headers: {
"Accept": "application/json",
'Content-Type': 'application/json',
"X-CSRF-TOKEN": token,
"X-XSRF-TOKEN": token,
},
});

// Check for response errors
if (!res.ok) {
const errorData = await res.json();
console.error('Failed to sign in:', errorData.message || res.statusText);
if (res.status === 419) {
// Handle CSRF token expiration
location.reload();
}
return;
}

// Process successful login
const data = await res.json();
localStorage.setItem('Atoken', data.token);
console.log('User:', data);

} catch (error) {
console.error('Failed to sign in:', error);
console.log(document.cookie);
}
}


Подробнее здесь: https://stackoverflow.com/questions/788 ... -3-laravel
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»