diff options
| author | nsfisis <nsfisis@gmail.com> | 2025-03-10 03:01:44 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2025-03-10 03:33:22 +0900 |
| commit | a3a2bc9dc1c339e26cf93e3b510f280acaab5027 (patch) | |
| tree | 91537e7a9bf9d3edf462e278b0415f17b39192d7 /frontend/app/.server/auth.ts | |
| parent | c44b3383a7e55553cc95bba7bd5574f71c2e3406 (diff) | |
| download | phperkaigi-2025-albatross-a3a2bc9dc1c339e26cf93e3b510f280acaab5027.tar.gz phperkaigi-2025-albatross-a3a2bc9dc1c339e26cf93e3b510f280acaab5027.tar.zst phperkaigi-2025-albatross-a3a2bc9dc1c339e26cf93e3b510f280acaab5027.zip | |
feat(fontend): migrate from Remix to React Router
Diffstat (limited to 'frontend/app/.server/auth.ts')
| -rw-r--r-- | frontend/app/.server/auth.ts | 59 |
1 files changed, 32 insertions, 27 deletions
diff --git a/frontend/app/.server/auth.ts b/frontend/app/.server/auth.ts index 386eb70..cbeb141 100644 --- a/frontend/app/.server/auth.ts +++ b/frontend/app/.server/auth.ts @@ -1,6 +1,5 @@ -import { redirect } from "@remix-run/node"; -import type { Session } from "@remix-run/server-runtime"; import { jwtDecode } from "jwt-decode"; +import { redirect } from "react-router"; import { Authenticator } from "remix-auth"; import { FormStrategy } from "remix-auth-form"; import { apiPostLogin } from "../api/client"; @@ -8,7 +7,7 @@ import { components } from "../api/schema"; import { createUnstructuredCookie } from "./cookie"; import { cookieOptions, sessionStorage } from "./session"; -const authenticator = new Authenticator<string>(sessionStorage); +const authenticator = new Authenticator<string>(); authenticator.use( new FormStrategy(async ({ form }) => { @@ -29,14 +28,12 @@ const tokenCookie = createUnstructuredCookie("albatross_token", cookieOptions); * @throws Error on failure */ export async function login(request: Request): Promise<never> { - const jwt = await authenticator.authenticate("default", request, { - throwOnError: true, - }); + const jwt = await authenticator.authenticate("default", request); const session = await sessionStorage.getSession( request.headers.get("cookie"), ); - session.set(authenticator.sessionKey, jwt); + session.set("user", jwt); throw redirect("/dashboard", { headers: [ @@ -46,34 +43,42 @@ export async function login(request: Request): Promise<never> { }); } -export async function logout(request: Request | Session): Promise<never> { - try { - return await authenticator.logout(request, { redirectTo: "/" }); - } catch (response) { - if (response instanceof Response) { - response.headers.append( +export async function logout(request: Request): Promise<never> { + const session = await sessionStorage.getSession( + request.headers.get("cookie"), + ); + throw redirect("/", { + headers: [ + ["Set-Cookie", await sessionStorage.destroySession(session)], + [ "Set-Cookie", await tokenCookie.serialize("", { maxAge: 0, expires: new Date(0) }), - ); - } - throw response; - } + ], + ], + }); } export async function ensureUserLoggedIn( - request: Request | Session, + request: Request, ): Promise<{ user: User; token: string }> { - const token = await authenticator.isAuthenticated(request, { - failureRedirect: "/login", - }); + const session = await sessionStorage.getSession( + request.headers.get("cookie"), + ); + const token = session.get("user"); + if (!token) { + throw redirect("/login"); + } const user = jwtDecode<User>(token); return { user, token }; } -export async function ensureUserNotLoggedIn( - request: Request | Session, -): Promise<null> { - return await authenticator.isAuthenticated(request, { - successRedirect: "/dashboard", - }); +export async function ensureUserNotLoggedIn(request: Request): Promise<null> { + const session = await sessionStorage.getSession( + request.headers.get("cookie"), + ); + const token = session.get("user"); + if (token) { + throw redirect("/dashboard"); + } + return null; } |
