ваше сообщение коммита
This commit is contained in:
@@ -16,18 +16,34 @@ class EmailAuth {
|
||||
throw new Error('Некорректный формат email');
|
||||
}
|
||||
|
||||
// Проверяем, существует ли пользователь с таким email
|
||||
const existingEmailUser = await db.query(
|
||||
`SELECT u.id FROM users u
|
||||
JOIN user_identities i ON u.id = i.user_id
|
||||
WHERE i.provider = 'email' AND i.provider_id = $1`,
|
||||
[email.toLowerCase()]
|
||||
);
|
||||
|
||||
// Создаем или получаем ID пользователя
|
||||
let userId;
|
||||
|
||||
if (session.authenticated && session.userId) {
|
||||
// Если пользователь уже аутентифицирован, используем его ID
|
||||
userId = session.userId;
|
||||
logger.info(`[initEmailAuth] Using existing authenticated user ${userId} for email ${email}`);
|
||||
} else if (existingEmailUser.rows.length > 0) {
|
||||
// Если найден пользователь с таким email, используем его ID
|
||||
userId = existingEmailUser.rows[0].id;
|
||||
logger.info(`[initEmailAuth] Found existing user ${userId} with email ${email}`);
|
||||
} else {
|
||||
// Создаем временного пользователя, если нужно будет создать нового
|
||||
const userResult = await db.query(
|
||||
'INSERT INTO users (role) VALUES ($1) RETURNING id',
|
||||
['user']
|
||||
);
|
||||
userId = userResult.rows[0].id;
|
||||
session.tempUserId = userId;
|
||||
logger.info(`[initEmailAuth] Created temporary user ${userId} for email ${email}`);
|
||||
}
|
||||
|
||||
// Сохраняем email в сессии
|
||||
@@ -73,7 +89,25 @@ class EmailAuth {
|
||||
const email = session.pendingEmail.toLowerCase();
|
||||
let finalUserId;
|
||||
|
||||
// Ищем всех пользователей с похожими идентификаторами
|
||||
// Если пользователь уже авторизован, используем его ID
|
||||
if (session.authenticated && session.userId) {
|
||||
finalUserId = session.userId;
|
||||
logger.info(`[checkEmailVerification] Using existing authenticated user ${finalUserId}`);
|
||||
|
||||
// Связываем email с существующим пользователем
|
||||
await authService.linkIdentity(finalUserId, 'email', email);
|
||||
|
||||
// Очищаем временные данные
|
||||
delete session.pendingEmail;
|
||||
|
||||
return {
|
||||
verified: true,
|
||||
userId: finalUserId,
|
||||
email: email
|
||||
};
|
||||
}
|
||||
|
||||
// Если пользователь не авторизован, ищем всех пользователей с похожими идентификаторами
|
||||
const identities = {
|
||||
email: email,
|
||||
guest: session.guestId
|
||||
|
||||
Reference in New Issue
Block a user