fix: reset UserContext on login/logout to prevent admin page stuck on re-login
Root cause: UserContext.checked was never reset on logout, causing AdminLayout's use_effect to skip get_current_user() on subsequent mounts, leaving the page in (checked=true, user=None) limbo. - Reset ctx.user and ctx.checked on logout in admin_layout.rs - Reset ctx.checked on login success in login.rs so AdminLayout re-validates session on mount
This commit is contained in:
parent
58cfcc31bf
commit
28d1ee0d52
@ -17,7 +17,6 @@ pub fn AdminLayout() -> Element {
|
||||
let route = use_route::<Route>();
|
||||
let show_skeleton = use_delayed_loading(move || !(ctx.checked)());
|
||||
|
||||
// 只在首次挂载时加载用户数据
|
||||
use_effect(move || {
|
||||
if !(ctx.checked)() {
|
||||
(ctx.checked).set(true);
|
||||
@ -69,6 +68,8 @@ pub fn AdminLayout() -> Element {
|
||||
onclick: move |_| {
|
||||
spawn(async move {
|
||||
let _ = logout().await;
|
||||
ctx.user.set(None);
|
||||
ctx.checked.set(false);
|
||||
let _ = navigator.push(Route::Login {});
|
||||
});
|
||||
},
|
||||
|
||||
@ -3,6 +3,7 @@ use dioxus::router::components::Link;
|
||||
|
||||
use crate::api::auth::{login, AuthResponse};
|
||||
use crate::components::forms::{AlertBox, FormInput, FormLabel, BUTTON_PRIMARY_CLASS};
|
||||
use crate::context::UserContext;
|
||||
use crate::router::Route;
|
||||
|
||||
#[component]
|
||||
@ -10,6 +11,7 @@ pub fn Login() -> Element {
|
||||
let mut username = use_signal(|| "".to_string());
|
||||
let mut password = use_signal(|| "".to_string());
|
||||
let mut error = use_signal(|| None::<String>);
|
||||
let mut ctx: UserContext = use_context();
|
||||
|
||||
let on_submit = Callback::new(move |_| {
|
||||
error.set(None);
|
||||
@ -24,6 +26,7 @@ pub fn Login() -> Element {
|
||||
token: Some(_token),
|
||||
..
|
||||
}) => {
|
||||
ctx.checked.set(false);
|
||||
let _ = dioxus::router::navigator().push(Route::Admin {});
|
||||
}
|
||||
Ok(AuthResponse {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user