ваше сообщение коммита

This commit is contained in:
2025-04-03 12:46:39 +03:00
parent 084c72462c
commit dbd4fd5cc2
8 changed files with 1314 additions and 643 deletions

View File

@@ -391,6 +391,42 @@ class AuthService {
throw error;
}
}
// Добавляем псевдоним функции checkAdminRole для обратной совместимости
async checkAdminTokens(address) {
if (!address) return false;
console.log(`Checking admin tokens for address: ${address}`);
const isAdmin = await this.checkAdminRole(address);
console.log(`Admin token check result for ${address}: ${isAdmin}`);
// Обновляем роль пользователя в базе данных, если есть админские токены
if (isAdmin) {
try {
// Находим userId по адресу
const userResult = await db.query(`
SELECT u.id FROM users u
JOIN user_identities ui ON u.id = ui.user_id
WHERE ui.provider = 'wallet' AND ui.provider_id = $1`,
[address.toLowerCase()]
);
if (userResult.rows.length > 0) {
const userId = userResult.rows[0].id;
// Обновляем роль пользователя
await db.query(
'UPDATE users SET role = $1 WHERE id = $2',
['admin', userId]
);
console.log(`Updated user ${userId} role to admin based on token holdings`);
}
} catch (error) {
console.error('Error updating user role:', error);
}
}
return isAdmin;
}
}
// Создаем и экспортируем единственный экземпляр

View File

@@ -73,16 +73,37 @@ class EmailAuth {
const userId = result.userId || session.tempUserId;
const email = session.pendingEmail;
// Добавляем email в базу данных
await db.query(
`INSERT INTO user_identities
(user_id, provider, provider_id)
VALUES ($1, $2, $3)
ON CONFLICT (provider, provider_id)
DO UPDATE SET user_id = $1`,
[userId, 'email', email.toLowerCase()]
// Проверяем, существует ли уже этот email в user_identities
const existingUserQuery = await db.query(
`SELECT user_id FROM user_identities
WHERE provider = 'email' AND provider_id = $1`,
[email.toLowerCase()]
);
let finalUserId = userId;
// Если email уже связан с другим пользователем
if (existingUserQuery.rows.length > 0) {
finalUserId = existingUserQuery.rows[0].user_id;
logger.info(`Using existing user ID ${finalUserId} for email ${email}`);
// Обновляем идентификатор пользователя в сессии
if (userId !== finalUserId) {
logger.info(`Changing user ID from ${userId} to ${finalUserId} based on existing email identity`);
}
} else {
// Добавляем email в базу данных для нового пользователя
await db.query(
`INSERT INTO user_identities
(user_id, provider, provider_id)
VALUES ($1, $2, $3)
ON CONFLICT (provider, provider_id)
DO UPDATE SET user_id = $1`,
[finalUserId, 'email', email.toLowerCase()]
);
logger.info(`Added new email identity ${email} for user ${finalUserId}`);
}
// Очищаем временные данные
delete session.pendingEmail;
if (session.tempUserId) {
@@ -91,7 +112,7 @@ class EmailAuth {
return {
verified: true,
userId,
userId: finalUserId,
email: email.toLowerCase()
};
} catch (error) {