From 34c050384be271ce93d80c76da93c7c517c0a0a2 Mon Sep 17 00:00:00 2001 From: Amatsugu Date: Sat, 17 May 2025 17:35:13 -0400 Subject: [PATCH] Login Session/ Logout button --- AobaClient/src/components/navbar.rs | 11 +++++++++-- AobaClient/src/components/notif.rs | 2 +- AobaClient/src/contexts/auth_context.rs | 8 +++++++- AobaClient/src/views/login.rs | 6 +++--- 4 files changed, 20 insertions(+), 7 deletions(-) diff --git a/AobaClient/src/components/navbar.rs b/AobaClient/src/components/navbar.rs index 07b0f1b..42554a1 100644 --- a/AobaClient/src/components/navbar.rs +++ b/AobaClient/src/components/navbar.rs @@ -1,6 +1,6 @@ use dioxus::prelude::*; -use crate::Route; +use crate::{contexts::AuthContext, Route}; const NAV_CSS: Asset = asset!("/assets/style/nav.scss"); const NAV_ICON: Asset = asset!("/assets/favicon.ico"); @@ -47,7 +47,14 @@ pub fn Widgets() -> Element { #[component] pub fn Utils() -> Element { + let mut auth_context = use_context::(); + rsx! { - div { class: "utils" } + div { class: "utils", + div{ + onclick: move |_| auth_context.logout(), + "Logout" + } + } } } diff --git a/AobaClient/src/components/notif.rs b/AobaClient/src/components/notif.rs index ba089ed..670496d 100644 --- a/AobaClient/src/components/notif.rs +++ b/AobaClient/src/components/notif.rs @@ -1,4 +1,4 @@ -use dioxus::{html::u::icon, prelude::*}; +use dioxus::prelude::*; use crate::components::icons; diff --git a/AobaClient/src/contexts/auth_context.rs b/AobaClient/src/contexts/auth_context.rs index 154f661..c4b4aaf 100644 --- a/AobaClient/src/contexts/auth_context.rs +++ b/AobaClient/src/contexts/auth_context.rs @@ -7,12 +7,18 @@ pub struct AuthContext { } impl AuthContext { - pub fn set_token(&mut self, token: String) { + pub fn login(&mut self, token: String) { self.jwt.set(Some(token.clone())); let local_storage = window().unwrap().local_storage().unwrap().unwrap(); _ = local_storage.set_item("token", token.as_str()); } + pub fn logout(&mut self) { + self.jwt.set(None); + let local_storage = window().unwrap().local_storage().unwrap().unwrap(); + _ = local_storage.remove_item("token"); + } + pub fn new() -> Self { println!("new"); let local_storage = window().unwrap().local_storage().unwrap().unwrap(); diff --git a/AobaClient/src/views/login.rs b/AobaClient/src/views/login.rs index 79718aa..13383c1 100644 --- a/AobaClient/src/views/login.rs +++ b/AobaClient/src/views/login.rs @@ -36,16 +36,16 @@ pub fn Login() -> Element { Ok(res) => { match res.into_inner().result.unwrap() { crate::rpc::aoba::login_response::Result::Jwt(jwt) => { - auth_context.jwt.set(Some(jwt.token)); + auth_context.login(jwt.token); } crate::rpc::aoba::login_response::Result::Error(login_error) => { - auth_context.jwt.set(None); + auth_context.logout(); error.set(Some(login_error.message)); } }; } Err(_err) => { - auth_context.jwt.set(None); + auth_context.logout(); } } });