feat(auth): koppla login/register till Firebase → /v1/auth/session (AUTH-5)
This commit is contained in:
@@ -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({
|
||||
|
||||
@@ -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<LoginResponse>("/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<LoginResponse>("/v1/auth/session", {
|
||||
method: "POST",
|
||||
body: { email, password },
|
||||
body: { idToken },
|
||||
});
|
||||
await setSession(
|
||||
{ accessToken: result.accessToken, refreshToken: result.refreshToken },
|
||||
|
||||
@@ -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<RegisterResponse>("/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<RegisterResponse>("/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",
|
||||
},
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user