const passport = require('passport'); const { PrismaClient } = require('@prisma/client'); const prisma = new PrismaClient(); // Kullanıcıyı session'a serialize et passport.serializeUser((user, done) => { done(null, user.id); }); // Session'dan kullanıcıyı deserialize et passport.deserializeUser(async (id, done) => { try { const user = await prisma.user.findUnique({ where: { id }, select: { id: true, email: true, username: true, firstName: true, lastName: true, avatar: true, authProvider: true, isActive: true, isAdmin: true } }); done(null, user); } catch (error) { done(error, null); } }); // Google OAuth Strategy - Sadece credentials varsa yükle if (process.env.GOOGLE_CLIENT_ID && process.env.GOOGLE_CLIENT_SECRET) { const GoogleStrategy = require('passport-google-oauth20').Strategy; passport.use(new GoogleStrategy({ clientID: process.env.GOOGLE_CLIENT_ID, clientSecret: process.env.GOOGLE_CLIENT_SECRET, callbackURL: process.env.GOOGLE_CALLBACK_URL || "/api/auth/google/callback" }, async (accessToken, refreshToken, profile, done) => { try { // Önce Google ID ile kullanıcı ara let user = await prisma.user.findUnique({ where: { googleId: profile.id } }); if (user) { // Kullanıcı zaten var, son giriş tarihini güncelle user = await prisma.user.update({ where: { id: user.id }, data: { lastLoginAt: new Date() } }); return done(null, user); } // Email ile kullanıcı ara (mevcut hesap varsa bağla) user = await prisma.user.findUnique({ where: { email: profile.emails[0].value } }); if (user) { // Mevcut hesabı Google ile bağla user = await prisma.user.update({ where: { id: user.id }, data: { googleId: profile.id, authProvider: 'google', avatar: profile.photos[0]?.value || user.avatar, lastLoginAt: new Date() } }); return done(null, user); } // Yeni kullanıcı oluştur const username = profile.emails[0].value.split('@')[0] + '_' + Math.random().toString(36).substr(2, 4); user = await prisma.user.create({ data: { email: profile.emails[0].value, username: username, firstName: profile.name.givenName || '', lastName: profile.name.familyName || '', googleId: profile.id, authProvider: 'google', avatar: profile.photos[0]?.value, lastLoginAt: new Date() } }); return done(null, user); } catch (error) { console.error('Google OAuth Error:', error); return done(error, null); } })); } module.exports = passport;