Route::middleware('auth:sanctum')->group(function () {
// Защищенные маршруты
Route::get('/all_languages', [LanguageController::class, 'index']);
Route::delete('/language_delete/{id}', [LanguageController::class, 'destroy']);
Route::post('/languages_add', [LanguageController::class, 'store']);
Route::get('/all_sections', [SectionController::class, 'index']);
Route::delete('/section_delete/{id}', [SectionController::class, 'destroy']);
Route::post('/section_add', [SectionController::class, 'store']);
Route::post('/logout', [AuthController::class, 'logout']);
Route::get('/exercises', [ExerciseController::class, 'getThemes']);
Route::post('/exercises_create', [ExerciseController::class, 'create']);
Route::get('/exercises_check_theme', [ExerciseController::class, 'checkIfThemeExists']);
Route::get('/get-exercises', [ExerciseController::class, 'getExercises']);
Route::post('/add-exercise', [ExerciseController::class, 'addExercise']);
Route::post('/delete-exercises', [ExerciseController::class, 'deleteExercises']);
Route::post('/delete-task-exercise', [ExerciseController::class, 'deleteTaskExercise']);
Route::post('/upload-video', [VideoUploadController::class, 'upload']);
Route::post('/upload-image', [ImageUploadController::class, 'upload']);
Route::post('/upload-audio', [AudioUploadController::class, 'upload']);
Route::put('/update-exercise', [ExerciseController::class, 'updateExercise']);
});
Route::post('register', [AuthController::class, 'register']);
Route::post('/login', [AuthController::class, 'login']);
// Метод для авторизации
public function login(Request $request)
{
$credentials = $request->only('name', 'password');
$user = User::where('name', $credentials['name'])->first();
if (!$user) {
return response()->json(['message' => 'Пользователь не существует'], 404);
}
if (!Hash::check($credentials['password'], $user->password)) {
return response()->json(['message' => 'Неверный пароль'], 401);
}
if (Auth::attempt($credentials)) {
$user = Auth::user();
// Создание токена
$token = $user->createToken('authToken')->plainTextToken;
// Разделение токена на две части
[$id, $token] = explode('|', $token, 2);
// Установка HttpOnly куки с токеном
$cookie = cookie('auth_token', $token, 525600); // Установка куки на 60 минут
// Возвращаем ответ с установленной кукой
return response()->json([
'message' => 'Авторизация успешна',
'user' => $user,
])->withCookie($cookie);
}
return response()->json(['message' => 'Неверный логин или пароль'], 401);
}
'paths' => ['api/*', 'sanctum/csrf-cookie'],
'allowed_methods' => ['*'],
'allowed_origins' => ['*'],
'allowed_origins_patterns' => [],
'allowed_headers' => ['*'],
'exposed_headers' => [],
'max_age' => 0,
'supports_credentials' => true
'stateful' => explode(',', env('SANCTUM_STATEFUL_DOMAINS', sprintf(
'%s%s',
'localhost,localhost:3000,127.0.0.1,127.0.0.1:8000,::1',
Sanctum::currentApplicationUrlWithPort()
))),
export function getBaseUrl() {
const requestUrl = useRequestURL();
const protocol = requestUrl.protocol; // 'http:' or'https:'
const host = requestUrl.hostname; // 'localhost' or sharpsss.ru
// const port = requestUrl.port ? `:${requestUrl.port}` : ''; // port
//return `${protocol}//${host}:8000`; //localhost
return `${protocol}//${host}`; //sharpsss.ru prod
}
// utils.js
import { getBaseUrl } from "~/utils/getBaseUrl.js"
export async function fetchCsrfToken() {
const baseUrl = getBaseUrl();
await $fetch(`${baseUrl}/sanctum/csrf-cookie`, {
method: 'GET',
credentials: 'include',
});
}
async function login() {
// const config = useRuntimeConfig();
if (!loginData.value.name || !loginData.value.password) {
showError.value = true;
errorMessage.value = "Пожалуйста, заполните все поля.";
return;
}
try {
// Получение CSRF токена
await fetchCsrfToken();
// Отправка запроса на авторизацию
const baseUrl = getBaseUrl();
const response = await $fetch(`${baseUrl}/api/login`, {
method: 'POST',
credentials: 'include',
headers: {
'X-XSRF-TOKEN': decodeURIComponent(getCookie('XSRF-TOKEN')),
'Accept': 'application/json, text/plain, */*',
'Content-Type': 'application/json',
'X-Requested-With': 'XMLHttpRequest',
},
body: loginData.value, // Теперь мы передаем объект напрямую
});
// Проверка успешной авторизации
if (response && response.message === 'Авторизация успешна') {
router.push('/content/Admin_panel');
authStore.setAuthentication(true); // Устанавливаем аутентификацию в true
// Установить состояние аутентификации при успешном входе
localStorage.setItem('isAuthenticated', '1');
// console.log("Аутентификация прошла успешно");
}
} catch (error) {
if (error.response) {
switch (error.response.status) {
case 401:
errorMessage.value = "Неверный пароль";
break;
case 404:
errorMessage.value = "Пользователь не существует";
break;
default:
errorMessage.value = "Произошла ошибка аутентификации";
}
} else {
errorMessage.value = "Ошибка соединения с сервером";
}
showError.value = true;
}
}
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
'api' => [
\Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
\Illuminate\Routing\Middleware\ThrottleRequests::class.':api',
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
];
server {
listen 80;
listen [::]:80;
server_name sharpsss.ru www.sharpsss.ru;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name sharpsss.ru www.sharpsss.ru;
ssl_certificate /etc/letsencrypt/live/sharpsss.ru/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/sharpsss.ru/privkey.pem; # managed by Certbot
root /var/www/cms_prod/app_api/public;
index index.php index.html index.htm;
#Laravel API и Sanctum CSRF Cookie
# location ^~ /api/sanctum/csrf-cookie/ {
# try_files $uri $uri/ /index.php$is_args$args;
# }
location ^~ /sanctum/csrf-cookie/ {
try_files $uri $uri/ /index.php$is_args$args;
}
location ^~ /api/ {
try_files $uri $uri/ /index.php$is_args$args;
}
# Обрабатывать PHP скрипты
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
}
# Все остальные запросы перенаправлять на Nuxt.js сервер
location / {
proxy_pass http://localhost:3000; # Используйте localhost, если Nuxt.js запущен на том же сервере
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
# Дополнительные настройки SSL
# ...
}
Request URL:
https://sharpsss.ru/sanctum/csrf-cookie
Request Method:
GET
Status Code:
404 Not Found
Remote Address:
134.0.117.3:443
Referrer Policy:
strict-origin-when-cross-origin
пробовал в .env ставить SESSION_SECURE_COOKIE=true,также пробовал prefix в api/config/sanctum.php 'prefix' => 'api/sanctum' ставить чтобы по api/santum отрабатывало (и чисто получение вроде как работало но лишь при авторизации потом все мидлвар запросы не работали) Laravel\Sanctum\SanctumServiceProvider::class,
не помогло, в роут листе гет вот так обозначен GET|HEAD sanctum/csrf-cookie .......................................................... sanctum.csrf-cookie › Laravel\Sanctum › CsrfCookieController@show