diff --git a/apps/api/src/routes/auth.ts b/apps/api/src/routes/auth.ts index 2f40d33..7d8cb3e 100644 --- a/apps/api/src/routes/auth.ts +++ b/apps/api/src/routes/auth.ts @@ -26,6 +26,7 @@ import { createFirebaseTokenVerifier, type TokenVerifier } from "../lib/token-ve /** Body-schema för Firebase-sessionväxling. */ const firebaseSessionInputSchema = z.object({ idToken: z.string().min(1), + displayName: z.string().optional(), locale: z.string().optional(), }); @@ -168,7 +169,7 @@ export async function authRoutes(app: FastifyInstance) { if (!user) { if (!identity.email) throw errors.badRequest("Firebase-token saknar e-postadress."); const locale = input.locale ?? "sv-SE"; - const displayName = identity.name ?? identity.email.split("@")[0] ?? "Användare"; + const displayName = input.displayName ?? identity.name ?? identity.email.split("@")[0] ?? "Användare"; [user] = await app.db .insert(schema.users) .values({ diff --git a/apps/mobile/src/app/(auth)/login.tsx b/apps/mobile/src/app/(auth)/login.tsx index 023645d..9f84098 100644 --- a/apps/mobile/src/app/(auth)/login.tsx +++ b/apps/mobile/src/app/(auth)/login.tsx @@ -2,6 +2,7 @@ import { useState } from "react"; import { Text, View } from "react-native"; import { Link, Redirect, router } from "expo-router"; import { api } from "@/lib/api"; +import { firebaseAuthProvider } from "@/lib/auth-provider/firebase"; import { useAuth, type AuthUser } from "@/lib/auth"; import { t } from "@/lib/i18n"; import { Body, Button, Input, Screen, Spacer, Title } from "@/components/ui"; @@ -27,9 +28,12 @@ export default function LoginScreen() { setBusy(true); setError(null); try { - const result = await api("/v1/auth/login", { + await firebaseAuthProvider.signInWithEmail(email.trim(), password); + const idToken = await firebaseAuthProvider.getIdToken(); + if (!idToken) throw new Error(t("common.error")); + const result = await api("/v1/auth/session", { method: "POST", - body: { email, password }, + body: { idToken }, }); await setSession( { accessToken: result.accessToken, refreshToken: result.refreshToken }, diff --git a/apps/mobile/src/app/(auth)/register.tsx b/apps/mobile/src/app/(auth)/register.tsx index b191476..d1a1082 100644 --- a/apps/mobile/src/app/(auth)/register.tsx +++ b/apps/mobile/src/app/(auth)/register.tsx @@ -2,6 +2,7 @@ import { useState } from "react"; import { Text, View } from "react-native"; import { Link, router } from "expo-router"; import { api } from "@/lib/api"; +import { firebaseAuthProvider } from "@/lib/auth-provider/firebase"; import { persistLanguageTag, useAuth, type AuthUser } from "@/lib/auth"; import { detectDeviceLanguageTag, t } from "@/lib/i18n"; import { localeDefaultsForRegion } from "@app/shared-types"; @@ -28,13 +29,15 @@ export default function RegisterScreen() { setBusy(true); setError(null); try { - const result = await api("/v1/auth/register", { + await firebaseAuthProvider.signUpWithEmail(email.trim(), password); + const idToken = await firebaseAuthProvider.getIdToken(); + if (!idToken) throw new Error(t("common.error")); + const result = await api("/v1/auth/session", { method: "POST", body: { + idToken, displayName, - email, - password, - // D-031: enhetens språk – backend skapar locale-preferenser före välkomstmejlet. + // D-031: enhetens språk – backend skapar locale-preferenser. locale: detectDeviceLanguageTag() ?? "sv-SE", }, });