Files
Momento/memento-note/app/api/mobile/auth/google-callback/route.ts
Antigravity d06ea93f11
Some checks failed
CI / Lint, Unit Tests & Build (push) Failing after 1m18s
CI / Deploy production (on server) (push) Has been skipped
mobile: login - bouton Google OAuth + show/hide password + message erreur Google
- login.tsx: bouton 'Continuer avec Google' (expo-web-browser + deep link memento://auth)
- login.tsx: bouton oeil pour afficher/masquer mot de passe
- login.tsx: message d'erreur contextuel si compte Google (pas de mot de passe en DB)
- store.ts: loginWithToken() pour recevoir le token après OAuth Google
- google-start/route.ts: lance le flux NextAuth Google avec redirect callback
- google-callback/route.ts: reçoit la session, génère token mobile, redirige vers memento://auth

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-29 17:09:06 +00:00

39 lines
1.2 KiB
TypeScript

import { NextRequest, NextResponse } from 'next/server'
import { auth } from '@/auth'
import prisma from '@/lib/prisma'
import { createMobileToken } from '@/lib/mobile-auth'
// Appelé après le flux Google OAuth — génère un token mobile et redirige vers l'app native
export async function GET(req: NextRequest) {
try {
const session = await auth()
if (!session?.user?.email) {
return NextResponse.redirect(`memento://auth?error=unauthorized`)
}
const user = await prisma.user.findUnique({
where: { email: session.user.email },
select: { id: true, name: true, email: true, subscription: { select: { tier: true } } },
})
if (!user) {
return NextResponse.redirect(`memento://auth?error=not_found`)
}
const token = createMobileToken(user.id)
const params = new URLSearchParams({
token,
id: user.id,
name: user.name ?? '',
email: user.email ?? '',
tier: user.subscription?.tier ?? 'FREE',
})
return NextResponse.redirect(`memento://auth?${params.toString()}`)
} catch (e) {
console.error('[mobile/auth/google-callback]', e)
return NextResponse.redirect(`memento://auth?error=server_error`)
}
}