aboutsummaryrefslogtreecommitdiffhomepage
path: root/frontend/app/.server/auth.ts
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2025-03-10 03:01:44 +0900
committernsfisis <nsfisis@gmail.com>2025-03-10 03:33:22 +0900
commita3a2bc9dc1c339e26cf93e3b510f280acaab5027 (patch)
tree91537e7a9bf9d3edf462e278b0415f17b39192d7 /frontend/app/.server/auth.ts
parentc44b3383a7e55553cc95bba7bd5574f71c2e3406 (diff)
downloadphperkaigi-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.ts59
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;
}