fix(auth): add resilient local fallback for Google auth when PostgreSQL is offline
This commit is contained in:
@@ -47,29 +47,43 @@ export default defineEventHandler(async (event) => {
|
||||
const username = email.split('@')[0].toLowerCase().replace(/\s+/g, '-').replace(/[^a-z0-9-_]/g, '')
|
||||
const userId = fbUser.localId
|
||||
|
||||
const user = await prisma.user.upsert({
|
||||
where: { email },
|
||||
update: {
|
||||
username
|
||||
// Мы не затираем профиль при каждом входе, но нам нужно его получить
|
||||
},
|
||||
create: {
|
||||
let user: any
|
||||
try {
|
||||
user = await prisma.user.upsert({
|
||||
where: { email },
|
||||
update: {
|
||||
username
|
||||
},
|
||||
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,
|
||||
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}`
|
||||
}
|
||||
displayName: fbUser.displayName || username,
|
||||
avatar: fbUser.photoUrl || `https://api.dicebear.com/7.x/avataaars/svg?seed=${userId}`
|
||||
}
|
||||
},
|
||||
include: {
|
||||
profile: true
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
const token = generateToken({
|
||||
id: user.id,
|
||||
|
||||
Reference in New Issue
Block a user