fix logout endpoint
Seto Elkahfi committed
Aug 1, 2024 at 14:35 UTC
1995dfd72d48bef513d58b534bbc2d4223d97cd0
2 files changed
+40
-20
frontend/splitfire-desktop/app/logout/page.tsx
+39
-19
@@ -1,12 +1,13 @@
1
"use client";
2
3
-import { useContext, useEffect, useState } from "react";
3
+import { useContext, useState } from "react";
4
import { UserContext } from "../_src/lib/CurrentUserContext";
5
import { useLogger } from "../_src/lib/logger";
6
-import { db } from "../_src/lib/db";
6
+import { CurrentUser, db } from "../_src/lib/db";
7
import { invoke } from "@tauri-apps/api/tauri";
8
import { TAURI_ACCOUNT_LOGOUT } from "../_src/lib/tauriHandler";
9
import { useRouter } from "next/navigation";
10
+import { Button } from "../_ui/components/button";
11
12
enum State {
13
LOADING,
@@ -16,30 +17,49 @@ enum State {
17
18
export default function Page() {
19
const [state, setState] = useState(State.LOADING);
20
+ const [user, setUser] = useState<CurrentUser | null>(null);
21
const log = useLogger("Logout/Page");
20
- const currentUser = useContext(UserContext);
22
const router = useRouter();
23
+ const userContext = useContext(UserContext);
24
23
- useEffect(() => {
24
- async function logout() {
25
- log.debug(currentUser);
25
+ const updateUser = (newUser: CurrentUser | null) => {
26
+ setUser(newUser);
27
+ };
28
+
29
+ const logout = async () => {
30
+ try {
31
+ setState(State.LOADING);
32
+ log.debug("user", user);
33
+ log.debug("userContext", userContext);
34
+ const payload = {
35
+ accessToken: userContext.user?.accessToken,
36
+ };
37
+ log.debug("Logging out", payload);
38
+ const res = await invoke(TAURI_ACCOUNT_LOGOUT, payload);
39
+ log.debug(res);
40
+ updateUser(null);
41
db.currentUser.clear();
27
- if (currentUser.user?.accessToken) {
28
- const res = await invoke(TAURI_ACCOUNT_LOGOUT, {
29
- accessToken: currentUser.user?.accessToken,
30
- });
31
- log.debug(res);
32
- }
42
setState(State.LOADED);
43
router.push("/");
44
+ router.refresh();
45
+ } catch (error) {
46
+ log.error(error);
47
+ setState(State.ERROR);
48
}
36
- logout();
37
- // eslint-disable-next-line react-hooks/exhaustive-deps
38
- }, [state]);
39
- const text = state === State.LOADING ? "Logging out..." : "Logged out";
49
+ };
50
+
51
+ const buttonText = state === State.LOADING ? "Logging out..." : "Logout";
52
+
53
return (
41
- <div className="prose prose-sm prose-invert max-w-none">
42
- <div className="grid grid-cols-1 gap-6 lg:grid-cols-3">{text}</div>
43
- </div>
54
+ <UserContext.Provider value={{ user, updateUser }}>
55
+ <div className="prose prose-sm prose-invert max-w-none">
56
+ <div className="grid grid-cols-1 gap-6 lg:grid-cols-3">
57
+ <Button onClick={() => logout()} variant={"outline"} size={"lg"}>
58
+ {buttonText}
59
+ </Button>
60
+ <div>This will remove your session and caches.</div>
61
+ </div>
62
+ </div>
63
+ </UserContext.Provider>
64
);
65
}
frontend/splitfire-desktop/src-tauri/src/rest/account.rs
+1
-1
@@ -96,7 +96,7 @@ pub async fn account_logout(access_token: String) {
96
debug!("Logging out with access token {}", access_token);
97
// Logout
98
let response = Client::new()
99
- .post(account_url_builder(PATH_ACCOUNT_LOGOUT))
99
+ .delete(account_url_builder(PATH_ACCOUNT_LOGOUT))
100
.header("Authorization", format!("Bearer {}", access_token))
101
.send()
102
.await;