Skip to content

Commit b51566e

Browse files
authored
Merge pull request #18 from getAlby/feat-save-jwt-storage
save JWT token to local storage
2 parents 3881f0c + cb7f6d6 commit b51566e

File tree

1 file changed

+22
-3
lines changed

1 file changed

+22
-3
lines changed

frontend/src/App.tsx

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { useState, FormEvent } from "react";
1+
import { useState, FormEvent, useEffect } from "react"; // Import useEffect
22
import "./App.css";
33
import AppsManager from "./components/AppsManager"; // Import the new component
44

@@ -8,6 +8,18 @@ function App() {
88
const [token, setToken] = useState<string | null>(null);
99
const [message, setMessage] = useState("");
1010

11+
// Check localStorage for token on initial load
12+
useEffect(() => {
13+
const storedToken = localStorage.getItem("jwtToken");
14+
if (storedToken) {
15+
setToken(storedToken);
16+
// Optionally, you might want to fetch user details here based on the token
17+
// For simplicity, we'll just restore the token state.
18+
// You might need to store/retrieve username too if needed outside login flow.
19+
setMessage("Session restored.");
20+
}
21+
}, []); // Empty dependency array ensures this runs only once on mount
22+
1123
const handleSignup = async (e: FormEvent) => {
1224
e.preventDefault();
1325
setMessage("");
@@ -22,14 +34,17 @@ function App() {
2234
});
2335
const data = await response.json();
2436
if (response.ok) {
37+
localStorage.setItem("jwtToken", data.token); // Save token to localStorage
2538
setToken(data.token);
2639
setMessage("Signup successful!");
2740
console.log("Signup successful, token:", data.token);
2841
} else {
42+
localStorage.removeItem("jwtToken"); // Clear token on failure
2943
setMessage(`Signup failed: ${data.message || "Unknown error"}`);
3044
console.error("Signup failed:", data);
3145
}
3246
} catch (error) {
47+
localStorage.removeItem("jwtToken"); // Clear token on error
3348
setMessage("Signup failed: Network error or server unavailable.");
3449
console.error("Signup error:", error);
3550
}
@@ -49,14 +64,17 @@ function App() {
4964
});
5065
const data = await response.json();
5166
if (response.ok) {
67+
localStorage.setItem("jwtToken", data.token); // Save token to localStorage
5268
setToken(data.token);
5369
setMessage("Login successful!");
5470
console.log("Login successful, token:", data.token);
5571
} else {
72+
localStorage.removeItem("jwtToken"); // Clear token on failure
5673
setMessage(`Login failed: ${data.message || "Unknown error"}`);
5774
console.error("Login failed:", data);
5875
}
5976
} catch (error) {
77+
localStorage.removeItem("jwtToken"); // Clear token on error
6078
setMessage("Login failed: Network error or server unavailable.");
6179
console.error("Login error:", error);
6280
}
@@ -107,9 +125,10 @@ function App() {
107125
</p>
108126
<button
109127
onClick={() => {
128+
localStorage.removeItem("jwtToken"); // Remove token from localStorage
110129
setToken(null);
111-
setUsername("");
112-
setPassword("");
130+
setUsername(""); // Clear username on logout
131+
setPassword(""); // Clear password on logout
113132
setMessage("Logged out.");
114133
}}
115134
>

0 commit comments

Comments
 (0)