From 6787ecf9ba9a0d4e96b4656531a3f971046abea5 Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 21 Apr 2025 21:35:15 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B2=D0=B0=D1=88=D0=B5=20=D1=81=D0=BE=D0=BE?= =?UTF-8?q?=D0=B1=D1=89=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BE=D0=BC=D0=BC?= =?UTF-8?q?=D0=B8=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/app.js | 19 +-- backend/nodemon.json | 7 +- backend/routes/auth.js | 22 +++- backend/services/session-service.js | 3 + backend/services/telegramBot.js | 17 ++- .../components/identity/TelegramConnect.vue | 108 ------------------ 6 files changed, 41 insertions(+), 135 deletions(-) delete mode 100644 frontend/src/components/identity/TelegramConnect.vue diff --git a/backend/app.js b/backend/app.js index 01c5cdf..64c098d 100644 --- a/backend/app.js +++ b/backend/app.js @@ -37,23 +37,8 @@ app.use( }) ); -// Настройка сессии -app.use( - session({ - store: sessionMiddleware.store, - secret: process.env.SESSION_SECRET || 'hb3atoken', - name: 'sessionId', - resave: false, - saveUninitialized: true, - cookie: { - maxAge: 30 * 24 * 60 * 60 * 1000, - httpOnly: true, - secure: false, - sameSite: 'lax', - path: '/', - }, - }) -); +// Настройка сессии (ИСПОЛЬЗУЕМ ИМПОРТИРОВАННОЕ MIDDLEWARE) +app.use(sessionMiddleware); // Добавим middleware для проверки сессии app.use(async (req, res, next) => { diff --git a/backend/nodemon.json b/backend/nodemon.json index ab5c2f7..e493199 100644 --- a/backend/nodemon.json +++ b/backend/nodemon.json @@ -1,9 +1,10 @@ { "verbose": true, - "ignore": [".git", "node_modules/**/node_modules", "sessions", "data/vector_store"], - "watch": ["*.js", "routes/", "services/", "utils/", "middleware/"], + "ignore": [".git", "node_modules/**/node_modules", "sessions", "data/vector_store", "logs"], + "watch": ["*.js", "routes/**/*", "services/**/*", "utils/**/*", "middleware/**/*"], "env": { "NODE_ENV": "development" }, - "ext": "js,json,env" + "ext": "js,json,env", + "exec": "node server.js" } diff --git a/backend/routes/auth.js b/backend/routes/auth.js index c02718e..a4f7ceb 100644 --- a/backend/routes/auth.js +++ b/backend/routes/auth.js @@ -431,15 +431,25 @@ router.post('/email/verify-code', async (req, res) => { }); // Инициализация Telegram аутентификации -router.post('/telegram/init', requireAuth, async (req, res) => { +router.post('/telegram/init', async (req, res) => { try { - const { userId } = req.session; + // Инициализируем процесс аутентификации через Telegram, передавая сессию + // и получаем результат (код и ссылку на бота) + const result = await initTelegramAuth(req.session); - // Инициализируем процесс аутентификации через Telegram - await initTelegramAuth(userId); + // Логируем сессию перед сохранением + logger.info('[telegram/init] Session object before save:', req.session); - // Не возвращаем данные обратно, так как они отправляются ботом - res.json({ success: true, message: 'Проверьте вашего Telegram бота' }); + // Сохраняем сессию, чтобы guestId точно записался в базу данных + await sessionService.saveSession(req.session); + + // Возвращаем код и ссылку на бота на фронтенд + res.json({ + success: true, + message: 'Проверьте вашего Telegram бота', + verificationCode: result.verificationCode, + botLink: result.botLink, + }); } catch (error) { logger.error('Error initializing Telegram auth:', error); diff --git a/backend/services/session-service.js b/backend/services/session-service.js index 50979a4..d5962e8 100644 --- a/backend/services/session-service.js +++ b/backend/services/session-service.js @@ -13,6 +13,9 @@ class SessionService { */ async saveSession(session) { try { + // Логируем содержимое сессии перед сохранением + logger.info('[SessionService] Saving session data:', session); + return new Promise((resolve, reject) => { session.save((err) => { if (err) { diff --git a/backend/services/telegramBot.js b/backend/services/telegramBot.js index 2d53b73..a06250a 100644 --- a/backend/services/telegramBot.js +++ b/backend/services/telegramBot.js @@ -134,8 +134,11 @@ async function getBot() { } } + // Логируем guestId перед обновлением сессии + logger.info(`[telegramBot] Attempting to update session for guestId: ${providerId}`); + // Обновляем сессию в базе данных - await db.query( + const updateResult = await db.query( `UPDATE session SET sess = (sess::jsonb || $1::jsonb)::json WHERE sess::jsonb @> $2::jsonb`, @@ -145,11 +148,23 @@ async function getBot() { authenticated: true, authType: 'telegram', telegramId: ctx.from.id.toString(), + // Добавляем имя и юзернейм из Telegram + telegramUsername: ctx.from.username, + telegramFirstName: ctx.from.first_name, }), JSON.stringify({ guestId: providerId }), ] ); + // Логируем результат обновления сессии + if (updateResult.rowCount > 0) { + logger.info(`Session updated successfully for guestId: ${providerId}, userId: ${userId}`); + } else { + logger.warn( + `Session update failed: No session found or updated for guestId: ${providerId}. User ${userId} authenticated via Telegram, but web session might not reflect it.` + ); + } + // Отправляем сообщение об успешной аутентификации await ctx.reply('Аутентификация успешна! Можете вернуться в приложение.'); diff --git a/frontend/src/components/identity/TelegramConnect.vue b/frontend/src/components/identity/TelegramConnect.vue deleted file mode 100644 index f7481b8..0000000 --- a/frontend/src/components/identity/TelegramConnect.vue +++ /dev/null @@ -1,108 +0,0 @@ - - -