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 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,
|
||||||
|
|||||||
Reference in New Issue
Block a user