Frontend API config and SSO toggles

This commit is contained in:
2026-03-18 19:03:29 +06:00
parent e8e8ed6ba3
commit f8cd9149c3
7 changed files with 69 additions and 37 deletions

View File

@@ -1 +1 @@
VITE_API_URL=http://26.62.117.104:8000
VITE_API_URL=

View File

@@ -1,3 +1,4 @@
# API URL (необязательно, по умолчанию определяется автоматически)
# Раскомментируйте и укажите ваш IP для удаленного доступа
# VITE_API_URL=http://26.123.45.67:8000
# API URL:
# - пусто: same-origin (/api), рекомендуется для production с nginx proxy
# - http://localhost:4546: локальный backend
VITE_API_URL=

View File

@@ -1,10 +1,10 @@
# Создайте файл .env.local и раскомментируйте нужную строку
# Для локального использования (по умолчанию)
# VITE_API_URL=http://localhost:8000
# VITE_API_URL=http://localhost:4546
# Для Radmin VPN (замените на ваш IP)
# VITE_API_URL=http://26.62.117.104:8000
# VITE_API_URL=http://26.62.117.104:4546
# Для Hamachi (замените на ваш IP)
# VITE_API_URL=http://25.123.45.67:8000
# VITE_API_URL=http://25.123.45.67:4546

View File

@@ -41,7 +41,7 @@ export default function Auth({ onLogin }) {
try {
await onLogin(username, password, isLogin);
} catch (err) {
setError(err.message || 'Ошибка авторизации');
setError(err?.response?.data?.detail || err.message || 'Ошибка авторизации');
} finally {
setLoading(false);
}
@@ -182,7 +182,7 @@ export default function Auth({ onLogin }) {
{isLogin && (
<div className={`mt-6 text-center text-sm ${currentTheme.textSecondary}`}>
<p>Учётные данные по умолчанию:</p>
<p className={`${currentTheme.text} font-mono mt-1`}>none / none</p>
<p className={`${currentTheme.text} font-mono mt-1`}>admin / Admin</p>
</div>
)}
</div>

View File

@@ -2,6 +2,7 @@ import { useState, useEffect } from 'react';
import { Users, Shield, Ban, Trash2, UserCheck, Server } from 'lucide-react';
import axios from 'axios';
import { notify } from './NotificationSystem';
import { API_URL } from '../config';
const UserManagement = ({ token, currentUser }) => {
const [users, setUsers] = useState([]);
@@ -10,8 +11,6 @@ const UserManagement = ({ token, currentUser }) => {
const [showRoleModal, setShowRoleModal] = useState(false);
const [showAccessModal, setShowAccessModal] = useState(false);
const API_URL = import.meta.env.VITE_API_URL || 'http://localhost:8000';
// Загрузка пользователей
const loadUsers = async () => {
try {

View File

@@ -1,21 +1,23 @@
// Автоматически определяем API URL
const getApiUrl = () => {
// Если задана переменная окружения, используем её
if (import.meta.env.VITE_API_URL) {
return import.meta.env.VITE_API_URL;
// Если переменная задана даже пустой строкой, используем её как явный override.
// Пустая строка = same-origin (/api через nginx proxy).
if (Object.prototype.hasOwnProperty.call(import.meta.env, 'VITE_API_URL')) {
const value = import.meta.env.VITE_API_URL || '';
return value.replace(/\/$/, '');
}
// Иначе используем текущий хост с портом 8000
// Иначе используем текущий хост с портом 4546
const protocol = window.location.protocol;
const hostname = window.location.hostname;
// Если localhost, используем localhost:8000
// Если localhost, используем localhost:4546
if (hostname === 'localhost' || hostname === '127.0.0.1') {
return `${protocol}//localhost:8000`;
return `${protocol}//localhost:4546`;
}
// Для удаленного доступа используем IP:8000
return `${protocol}//${hostname}:8000`;
// Для удаленного доступа используем IP:4546
return `${protocol}//${hostname}:4546`;
};
export const API_URL = getApiUrl();