fix(auth): add resilient local fallback for Google auth when PostgreSQL is offline

This commit is contained in:
2026-09-28 10:39:20 +05:00
parent 94da4dd1cf
commit 96fcf773f2
+30 -16
View File
@@ -47,29 +47,43 @@ export default defineEventHandler(async (event) => {
const username = email.split('@')[0].toLowerCase().replace(/\s+/g, '-').replace(/[^a-z0-9-_]/g, '') const username = email.split('@')[0].toLowerCase().replace(/\s+/g, '-').replace(/[^a-z0-9-_]/g, '')
const userId = fbUser.localId const userId = fbUser.localId
const user = await prisma.user.upsert({ let user: any
where: { email }, try {
update: { user = await prisma.user.upsert({
username where: { email },
// Мы не затираем профиль при каждом входе, но нам нужно его получить update: {
}, username
create: { },
create: {
id: userId,
email,
username,
password: 'firebase-managed',
role: 'user',
profile: {
create: {
displayName: fbUser.displayName || username,
avatar: fbUser.photoUrl || `https://api.dicebear.com/7.x/avataaars/svg?seed=${userId}`
}
}
},
include: {
profile: true
}
})
} catch (dbErr: any) {
console.warn('[Auth] Database offline, creating local dev session for:', email, dbErr.message)
user = {
id: userId, id: userId,
email, email,
username, username,
password: 'firebase-managed',
role: 'user', role: 'user',
profile: { profile: {
create: { displayName: fbUser.displayName || username,
displayName: fbUser.displayName || username, avatar: fbUser.photoUrl || `https://api.dicebear.com/7.x/avataaars/svg?seed=${userId}`
avatar: fbUser.photoUrl || `https://api.dicebear.com/7.x/avataaars/svg?seed=${userId}`
}
} }
},
include: {
profile: true
} }
}) }
const token = generateToken({ const token = generateToken({
id: user.id, id: user.id,