фикс
This commit is contained in:
parent
57fc384942
commit
af70e6e986
@ -110,9 +110,7 @@ const loginUser = async (req, res, next) => {
|
|||||||
if (!email || !password) {
|
if (!email || !password) {
|
||||||
res.status(400);
|
res.status(400);
|
||||||
throw new Error('Пожалуйста, укажите email и пароль.');
|
throw new Error('Пожалуйста, укажите email и пароль.');
|
||||||
}
|
} // Проверяем наличие специального логина для администратора
|
||||||
|
|
||||||
// Проверяем наличие специального логина для администратора
|
|
||||||
if (email === 'admin') {
|
if (email === 'admin') {
|
||||||
// Для логина "admin" не нормализуем email
|
// Для логина "admin" не нормализуем email
|
||||||
console.log('Попытка входа с административным логином');
|
console.log('Попытка входа с административным логином');
|
||||||
@ -120,8 +118,41 @@ const loginUser = async (req, res, next) => {
|
|||||||
|
|
||||||
if (!user) {
|
if (!user) {
|
||||||
console.log('Административный аккаунт не найден в базе данных');
|
console.log('Административный аккаунт не найден в базе данных');
|
||||||
res.status(401);
|
console.log('Создание административного аккаунта...');
|
||||||
throw new Error('Неверный логин или пароль.');
|
|
||||||
|
try {
|
||||||
|
// Если админ не найден, можно попытаться создать его на месте
|
||||||
|
const adminUser = new User({
|
||||||
|
name: 'Администратор',
|
||||||
|
email: 'admin',
|
||||||
|
password: 'admin124', // Пароль будет хеширован pre-save hook
|
||||||
|
dateOfBirth: new Date('1990-01-01'),
|
||||||
|
gender: 'other',
|
||||||
|
isActive: true,
|
||||||
|
isAdmin: true,
|
||||||
|
location: {
|
||||||
|
city: 'Admin',
|
||||||
|
country: 'System'
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
await adminUser.save();
|
||||||
|
console.log('Административный аккаунт создан успешно');
|
||||||
|
|
||||||
|
res.status(200).json({
|
||||||
|
_id: adminUser._id,
|
||||||
|
name: adminUser.name,
|
||||||
|
email: adminUser.email,
|
||||||
|
isAdmin: true,
|
||||||
|
token: generateToken(adminUser._id),
|
||||||
|
message: 'Административный аккаунт создан. Вход выполнен успешно!'
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
} catch (adminError) {
|
||||||
|
console.error('Ошибка при создании админ-аккаунта:', adminError);
|
||||||
|
res.status(401);
|
||||||
|
throw new Error('Неверный логин или пароль. Не удалось создать админа автоматически.');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!user.password) {
|
if (!user.password) {
|
||||||
@ -135,6 +166,10 @@ const loginUser = async (req, res, next) => {
|
|||||||
console.log('Результат проверки пароля:', isMatch ? 'Успешно' : 'Неверный пароль');
|
console.log('Результат проверки пароля:', isMatch ? 'Успешно' : 'Неверный пароль');
|
||||||
|
|
||||||
if (isMatch) {
|
if (isMatch) {
|
||||||
|
// Обновляем дату последнего входа
|
||||||
|
user.lastSeen = new Date();
|
||||||
|
await user.save();
|
||||||
|
|
||||||
res.status(200).json({
|
res.status(200).json({
|
||||||
_id: user._id,
|
_id: user._id,
|
||||||
name: user.name,
|
name: user.name,
|
||||||
@ -150,6 +185,30 @@ const loginUser = async (req, res, next) => {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Перед проверкой обычных пользователей, проверим наличие админа с почтой
|
||||||
|
if (email === 'admin@example.com') {
|
||||||
|
console.log('Попытка входа с email администратора: admin@example.com');
|
||||||
|
// Проверяем наличие админа с логином admin
|
||||||
|
const adminUser = await User.findOne({ email: 'admin' }).select('+password');
|
||||||
|
|
||||||
|
if (adminUser && await adminUser.matchPassword(password)) {
|
||||||
|
console.log('Успешный вход через email администратора, перенаправление на логин admin');
|
||||||
|
// Обновляем дату последнего входа
|
||||||
|
adminUser.lastSeen = new Date();
|
||||||
|
await adminUser.save();
|
||||||
|
|
||||||
|
res.status(200).json({
|
||||||
|
_id: adminUser._id,
|
||||||
|
name: adminUser.name,
|
||||||
|
email: adminUser.email,
|
||||||
|
isAdmin: true,
|
||||||
|
token: generateToken(adminUser._id),
|
||||||
|
message: 'Вход выполнен успешно!'
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Для обычных пользователей продолжаем проверку email
|
// Для обычных пользователей продолжаем проверку email
|
||||||
const normalizedEmail = email.toLowerCase();
|
const normalizedEmail = email.toLowerCase();
|
||||||
console.log('Нормализованный email для поиска:', normalizedEmail);
|
console.log('Нормализованный email для поиска:', normalizedEmail);
|
||||||
|
@ -41,13 +41,18 @@ const io = new Server(server, { // <--- Инициализация socket.io
|
|||||||
app.set('io', io);
|
app.set('io', io);
|
||||||
|
|
||||||
// Подключение к базе данных - проверяем, что импортировали функцию
|
// Подключение к базе данных - проверяем, что импортировали функцию
|
||||||
if (typeof connectDBModule === 'function') {
|
if (typeof connectDBModule === 'function') { try {
|
||||||
try {
|
|
||||||
connectDBModule() // Вызов функции подключения
|
connectDBModule() // Вызов функции подключения
|
||||||
.then(() => {
|
.then(async () => {
|
||||||
console.log('Успешное подключение к базе данных');
|
console.log('Успешное подключение к базе данных');
|
||||||
|
console.log('Инициализация административного аккаунта...');
|
||||||
// Инициализируем админ-аккаунт после подключения к БД
|
// Инициализируем админ-аккаунт после подключения к БД
|
||||||
initAdminAccount();
|
try {
|
||||||
|
await initAdminAccount();
|
||||||
|
console.log('Инициализация администратора завершена');
|
||||||
|
} catch (adminError) {
|
||||||
|
console.error('Ошибка при инициализации административного аккаунта:', adminError);
|
||||||
|
}
|
||||||
})
|
})
|
||||||
.catch(err => {
|
.catch(err => {
|
||||||
console.error('Ошибка при подключении к базе данных:', err);
|
console.error('Ошибка при подключении к базе данных:', err);
|
||||||
|
54
backend/utils/createAdmin.js
Normal file
54
backend/utils/createAdmin.js
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
const mongoose = require('mongoose');
|
||||||
|
const dotenv = require('dotenv');
|
||||||
|
const User = require('../models/User');
|
||||||
|
|
||||||
|
// Load env vars
|
||||||
|
dotenv.config();
|
||||||
|
|
||||||
|
// Connect to DB
|
||||||
|
mongoose.connect(process.env.MONGO_URI)
|
||||||
|
.then(() => console.log('MongoDB Connected'))
|
||||||
|
.catch(err => {
|
||||||
|
console.error('Error connecting to MongoDB:', err.message);
|
||||||
|
process.exit(1);
|
||||||
|
});
|
||||||
|
|
||||||
|
const createAdminAccount = async () => {
|
||||||
|
try {
|
||||||
|
// Check if admin already exists
|
||||||
|
const adminExists = await User.findOne({ email: 'admin' });
|
||||||
|
|
||||||
|
if (adminExists) {
|
||||||
|
console.log('Admin account already exists');
|
||||||
|
console.log('Email: admin');
|
||||||
|
console.log('Password: admin124');
|
||||||
|
process.exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create admin user
|
||||||
|
const admin = new User({
|
||||||
|
name: 'Администратор',
|
||||||
|
email: 'admin',
|
||||||
|
password: 'admin124',
|
||||||
|
dateOfBirth: new Date('1990-01-01'),
|
||||||
|
gender: 'other',
|
||||||
|
isActive: true,
|
||||||
|
isAdmin: true,
|
||||||
|
location: {
|
||||||
|
city: 'Admin',
|
||||||
|
country: 'System'
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
await admin.save();
|
||||||
|
console.log('Admin account created successfully');
|
||||||
|
console.log('Email: admin');
|
||||||
|
console.log('Password: admin124');
|
||||||
|
process.exit(0);
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Error creating admin account:', error);
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
createAdminAccount();
|
@ -1,4 +1,5 @@
|
|||||||
const User = require('../models/User');
|
const User = require('../models/User');
|
||||||
|
const bcrypt = require('bcryptjs');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Инициализирует административный аккаунт в системе
|
* Инициализирует административный аккаунт в системе
|
||||||
@ -7,14 +8,18 @@ const User = require('../models/User');
|
|||||||
*/
|
*/
|
||||||
const initAdminAccount = async () => {
|
const initAdminAccount = async () => {
|
||||||
try {
|
try {
|
||||||
|
console.log('[ADMIN INIT] Проверка наличия административного аккаунта...');
|
||||||
|
|
||||||
// Проверяем, существует ли уже админ
|
// Проверяем, существует ли уже админ
|
||||||
const adminExists = await User.findOne({ email: 'admin', isAdmin: true });
|
const adminExists = await User.findOne({ email: 'admin', isAdmin: true });
|
||||||
|
|
||||||
if (!adminExists) {
|
if (!adminExists) {
|
||||||
|
console.log('[ADMIN INIT] Административный аккаунт не найден. Создаю новый...');
|
||||||
|
|
||||||
// Создаем админа, если не существует
|
// Создаем админа, если не существует
|
||||||
const admin = new User({
|
const admin = new User({
|
||||||
name: 'Администратор',
|
name: 'Администратор',
|
||||||
email: 'admin', // Изменено с 'admin@example.com' на 'admin'
|
email: 'admin', // Используем 'admin' как логин
|
||||||
password: 'admin124',
|
password: 'admin124',
|
||||||
dateOfBirth: new Date('1990-01-01'), // Устанавливаем формальную дату рождения
|
dateOfBirth: new Date('1990-01-01'), // Устанавливаем формальную дату рождения
|
||||||
gender: 'other',
|
gender: 'other',
|
||||||
@ -24,15 +29,22 @@ const initAdminAccount = async () => {
|
|||||||
city: 'Admin',
|
city: 'Admin',
|
||||||
country: 'System'
|
country: 'System'
|
||||||
}
|
}
|
||||||
});
|
}); // Сохраняем админа
|
||||||
|
const savedAdmin = await admin.save();
|
||||||
await admin.save();
|
if (savedAdmin) {
|
||||||
console.log('Административный аккаунт успешно создан с email: admin');
|
console.log('[ADMIN INIT] Административный аккаунт успешно создан с логином: admin');
|
||||||
|
console.log('[ADMIN INIT] ID администратора:', savedAdmin._id);
|
||||||
|
console.log('[ADMIN INIT] Для входа используйте: логин "admin", пароль "admin124"');
|
||||||
|
} else {
|
||||||
|
console.error('[ADMIN INIT] Ошибка при сохранении администратора - не возвращен объект');
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
console.log('Административный аккаунт с email: admin уже существует');
|
console.log('[ADMIN INIT] Административный аккаунт с логином "admin" уже существует');
|
||||||
|
console.log('[ADMIN INIT] ID администратора:', adminExists._id);
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Ошибка при инициализации админ-аккаунта:', error);
|
console.error('[ADMIN INIT] Ошибка при инициализации админ-аккаунта:', error.message);
|
||||||
|
console.error('[ADMIN INIT] Полная ошибка:', error);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
167
backend/utils/test-admin.js
Normal file
167
backend/utils/test-admin.js
Normal file
@ -0,0 +1,167 @@
|
|||||||
|
const mongoose = require('mongoose');
|
||||||
|
const bcrypt = require('bcryptjs');
|
||||||
|
const User = require('../models/User');
|
||||||
|
const dotenv = require('dotenv');
|
||||||
|
|
||||||
|
// Load environment variables
|
||||||
|
dotenv.config();
|
||||||
|
|
||||||
|
// Connect to MongoDB
|
||||||
|
const connectDB = async () => {
|
||||||
|
try {
|
||||||
|
console.log('MongoDB URI:', process.env.MONGO_URI);
|
||||||
|
await mongoose.connect(process.env.MONGO_URI);
|
||||||
|
console.log('MongoDB Connected');
|
||||||
|
return true;
|
||||||
|
} catch (error) {
|
||||||
|
console.error('MongoDB Connection Error:', error);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Function to create admin
|
||||||
|
const createAdmin = async () => {
|
||||||
|
try {
|
||||||
|
// Check if admin exists
|
||||||
|
let admin = await User.findOne({ email: 'admin' });
|
||||||
|
|
||||||
|
if (admin) {
|
||||||
|
console.log('Admin user already exists:');
|
||||||
|
console.log({
|
||||||
|
id: admin._id,
|
||||||
|
name: admin.name,
|
||||||
|
email: admin.email,
|
||||||
|
isAdmin: admin.isAdmin
|
||||||
|
});
|
||||||
|
|
||||||
|
// Update admin to ensure correct properties
|
||||||
|
admin.name = 'Администратор';
|
||||||
|
admin.isAdmin = true;
|
||||||
|
admin.isActive = true;
|
||||||
|
await admin.save();
|
||||||
|
|
||||||
|
console.log('Admin user updated');
|
||||||
|
return admin;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create new admin user if doesn't exist
|
||||||
|
const salt = await bcrypt.genSalt(10);
|
||||||
|
const hashedPassword = await bcrypt.hash('admin124', salt);
|
||||||
|
|
||||||
|
admin = new User({
|
||||||
|
name: 'Администратор',
|
||||||
|
email: 'admin',
|
||||||
|
password: hashedPassword,
|
||||||
|
dateOfBirth: new Date('1990-01-01'),
|
||||||
|
gender: 'other',
|
||||||
|
isActive: true,
|
||||||
|
isAdmin: true,
|
||||||
|
location: {
|
||||||
|
city: 'Admin',
|
||||||
|
country: 'System'
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
await admin.save();
|
||||||
|
console.log('Admin user created successfully:');
|
||||||
|
console.log({
|
||||||
|
id: admin._id,
|
||||||
|
name: admin.name,
|
||||||
|
email: admin.email,
|
||||||
|
isAdmin: admin.isAdmin
|
||||||
|
});
|
||||||
|
|
||||||
|
return admin;
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Error creating admin:', error);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Create admin alias with email = admin@example.com
|
||||||
|
const createAdminAlias = async () => {
|
||||||
|
try {
|
||||||
|
// Check if admin@example.com exists
|
||||||
|
let adminAlias = await User.findOne({ email: 'admin@example.com' });
|
||||||
|
|
||||||
|
if (adminAlias) {
|
||||||
|
console.log('Admin alias already exists');
|
||||||
|
return adminAlias;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Find the main admin user
|
||||||
|
const mainAdmin = await User.findOne({ email: 'admin' });
|
||||||
|
if (!mainAdmin) {
|
||||||
|
console.error('Cannot create admin alias: main admin account not found');
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create admin alias
|
||||||
|
const salt = await bcrypt.genSalt(10);
|
||||||
|
const hashedPassword = await bcrypt.hash('admin124', salt);
|
||||||
|
|
||||||
|
adminAlias = new User({
|
||||||
|
name: 'Администратор',
|
||||||
|
email: 'admin@example.com',
|
||||||
|
password: hashedPassword,
|
||||||
|
dateOfBirth: new Date('1990-01-01'),
|
||||||
|
gender: 'other',
|
||||||
|
isActive: true,
|
||||||
|
isAdmin: true,
|
||||||
|
location: {
|
||||||
|
city: 'Admin',
|
||||||
|
country: 'System'
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
await adminAlias.save();
|
||||||
|
console.log('Admin alias created successfully:');
|
||||||
|
console.log({
|
||||||
|
id: adminAlias._id,
|
||||||
|
name: adminAlias.name,
|
||||||
|
email: adminAlias.email,
|
||||||
|
isAdmin: adminAlias.isAdmin
|
||||||
|
});
|
||||||
|
|
||||||
|
return adminAlias;
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Error creating admin alias:', error);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Main function
|
||||||
|
const main = async () => {
|
||||||
|
console.log('Testing Admin Creation...');
|
||||||
|
|
||||||
|
// Connect to database
|
||||||
|
const connected = await connectDB();
|
||||||
|
if (!connected) {
|
||||||
|
console.error('Failed to connect to database');
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create admin user
|
||||||
|
const admin = await createAdmin();
|
||||||
|
if (!admin) {
|
||||||
|
console.error('Failed to create admin user');
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create admin alias
|
||||||
|
const adminAlias = await createAdminAlias();
|
||||||
|
|
||||||
|
console.log('\nAdmin Credentials:');
|
||||||
|
console.log('1. Login: admin');
|
||||||
|
console.log(' Password: admin124');
|
||||||
|
|
||||||
|
if (adminAlias) {
|
||||||
|
console.log('2. Login: admin@example.com');
|
||||||
|
console.log(' Password: admin124');
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log('\nDone!');
|
||||||
|
process.exit(0);
|
||||||
|
};
|
||||||
|
|
||||||
|
main();
|
Loading…
x
Reference in New Issue
Block a user