+
+
+
+
+
+
{commonLinks.map((link) =>
link.isExternal ? (
diff --git a/frontend/src/app/[locale]/TokenProvider.tsx b/frontend/src/app/[locale]/TokenProvider.tsx
index 4851df8..26d0ffb 100644
--- a/frontend/src/app/[locale]/TokenProvider.tsx
+++ b/frontend/src/app/[locale]/TokenProvider.tsx
@@ -1,23 +1,47 @@
"use client";
-import { createContext, useState } from "react";
-import { TokenType, UserType } from "@/types/user";
+import { createContext, useState, useEffect } from "react";
+import { TokenType } from "@/types/user";
import { TokenProps } from "@/types/user";
-const defaultTokenContext = {
- token: null,
- setUser: (token: TokenType) => {},
-};
+const LOCAL_STORAGE_KEY = "testplat-auth-token";
+
+function storeTokenToLocalStorage(token: TokenType) {
+ localStorage.setItem(LOCAL_STORAGE_KEY, JSON.stringify(token));
+}
+
+function removeTokenFromLocalStorage() {
+ localStorage.removeItem(LOCAL_STORAGE_KEY);
+}
+
+const defaultTokenContext = {};
const TokenContext = createContext(defaultTokenContext);
const TokenProvider = ({ children }: TokenProps) => {
- const [token, setToken] = useState(null);
+ const [token, setToken] = useState({
+ access_token: "",
+ user: null,
+ });
const tokenContext = {
token,
setToken,
+ storeTokenToLocalStorage,
+ removeTokenFromLocalStorage,
};
+ useEffect(() => {
+ const restoreTokenFromLocalStorage = () => {
+ const tokenString = localStorage.getItem(LOCAL_STORAGE_KEY);
+ if (tokenString) {
+ setToken(JSON.parse(tokenString));
+ }
+ };
+ restoreTokenFromLocalStorage();
+ }, []);
+
return (
- {children}
+
+ {children}
+
);
};
diff --git a/frontend/src/app/[locale]/account/authControl.ts b/frontend/src/app/[locale]/account/authControl.ts
index 83ad23b..7fdb43c 100644
--- a/frontend/src/app/[locale]/account/authControl.ts
+++ b/frontend/src/app/[locale]/account/authControl.ts
@@ -18,9 +18,8 @@ async function signUp(newUser: UserType) {
if (!response.ok) {
throw new Error(`HTTP error! Status: ${response.status}`);
}
- const accessToken = await response.json();
- storeToken(accessToken);
- return accessToken;
+ const token = await response.json();
+ return token;
} catch (error: any) {
console.error("Error sign up:", error);
throw error;
@@ -43,21 +42,12 @@ async function signIn(signInUser: UserType) {
if (!response.ok) {
throw new Error(`HTTP error! Status: ${response.status}`);
}
- const accessToken = await response.json();
- storeToken(accessToken);
- return accessToken;
+ const token = await response.json();
+ return token;
} catch (error: any) {
console.error("Error sign in:", error);
throw error;
}
}
-function storeToken(accessToken: Object) {
- localStorage.setItem("testplat-auth-token", JSON.stringify(accessToken));
-}
-
-function signOut() {
- localStorage.removeItem("testplat-auth-token");
-}
-
-export { signUp, signIn, signOut };
+export { signUp, signIn };
diff --git a/frontend/src/app/[locale]/account/authPage.tsx b/frontend/src/app/[locale]/account/authPage.tsx
index 69d4fc9..6a6f5c4 100644
--- a/frontend/src/app/[locale]/account/authPage.tsx
+++ b/frontend/src/app/[locale]/account/authPage.tsx
@@ -9,6 +9,8 @@ import { roles } from "@/config/selection";
import { signUp, signIn } from "./authControl";
import { isValidEmail, isValidPassword } from "./validate";
import { TokenContext } from "../TokenProvider";
+import { useRouter } from "@/src/navigation";
+
type Props = {
isSignup: Boolean;
messages: AuthMessages;
@@ -16,6 +18,7 @@ type Props = {
};
export default function AuthPage({ isSignup, messages, locale }: Props) {
+ const router = useRouter();
const context = useContext(TokenContext);
const [user, setUser] = useState({
id: null,
@@ -59,30 +62,36 @@ export default function AuthPage({ isSignup, messages, locale }: Props) {
};
const submit = async () => {
+ let token;
if (isSignup) {
try {
- const token = await signUp(user);
- context.setToken(token);
- // Move to signin page
+ token = await signUp(user);
} catch {
setErrorMessage(messages.signupError);
+ return;
}
} else {
try {
- const token = await signIn(user);
- context.setToken(token);
- // Move to signin page
+ token = await signIn(user);
} catch {
setErrorMessage(messages.signinError);
+ return;
}
}
+
+ context.setToken(token);
+ context.storeTokenToLocalStorage(token);
+ router.push("/account", { locale: locale });
};
return (
{messages.title}
-
+