Clean up login form, add files for others
Some checks failed
Build Crate / build (push) Failing after 1m46s

This commit is contained in:
2024-08-26 19:44:52 -04:00
parent 65d47615da
commit e376874afa
6 changed files with 45 additions and 15 deletions

View File

View File

@@ -35,9 +35,6 @@ struct LoginFormState {
#[derive(Clone)] #[derive(Clone)]
pub struct LoginFormProps { pub struct LoginFormProps {
pub remember_me: bool, pub remember_me: bool,
pub endpoint: String,
pub lost_password_url: Option<String>,
pub forgot_password_url: Option<String>,
} }
#[auto_scope] #[auto_scope]
@@ -121,14 +118,19 @@ fn login_form_capsule<G: Html>(
input (bind:value = state.password, class="bg-gray-50 border border-gray-300 text-gray-900 sm:text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 dark:bg-gray-600 dark:border-gray-500 dark:placeholder-gray-400 dark:text-white"){} input (bind:value = state.password, class="bg-gray-50 border border-gray-300 text-gray-900 sm:text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 dark:bg-gray-600 dark:border-gray-500 dark:placeholder-gray-400 dark:text-white"){}
} }
div (class="flex justify-between"){ div (class="flex justify-between"){
(match props.remember_me {
true => { view!{ cx,
div (class="flex items-start"){ div (class="flex items-start"){
div (class="flex items-center h-5"){ div (class="flex items-center h-5"){
input (bind:checked = state.remember_me, type = "checkbox", class="w-4 h-4 text-blue-600 bg-gray-100 border-gray-300 rounded focus:ring-blue-500 dark:focus:ring-blue-600 dark:ring-offset-gray-800 focus:ring-2 dark:bg-gray-700 dark:border-gray-600") {} input (bind:checked = state.remember_me, type = "checkbox", class="w-4 h-4 text-blue-600 bg-gray-100 border-gray-300 rounded focus:ring-blue-500 dark:focus:ring-blue-600 dark:ring-offset-gray-800 focus:ring-2 dark:bg-gray-700 dark:border-gray-600") {}
} }
}
div (class="text-sm ml-3"){ div (class="text-sm ml-3"){
label (class="font-medium text-gray-900 dark:text-gray-300"){"Remember me"} label (class="font-medium text-gray-900 dark:text-gray-300"){"Remember me"}
} }
} }},
false => view!{cx, },
})
a (class="text-sm text-blue-700 hover:underline dark:text-blue-500"){"Lost Password?"} a (class="text-sm text-blue-700 hover:underline dark:text-blue-500"){"Lost Password?"}
} }
button (on:click = handle_log_in, class="w-full text-white bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:ring-blue-300 font-medium rounded-lg text-sm px-5 py-2.5 text-center dark:bg-blue-600 dark:hover:bg-blue-700 dark:focus:ring-blue-800"){"Log in"} button (on:click = handle_log_in, class="w-full text-white bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:ring-blue-300 font-medium rounded-lg text-sm px-5 py-2.5 text-center dark:bg-blue-600 dark:hover:bg-blue-700 dark:focus:ring-blue-800"){"Log in"}

View File

@@ -1 +1,3 @@
pub mod forgot_password_form;
pub mod login_form; pub mod login_form;
pub mod register_form;

View File

View File

@@ -97,9 +97,6 @@ pub fn Header<'a, G: Html>(cx: Scope<'a>, HeaderProps { game, title }: HeaderPro
(LOGIN_FORM.widget(cx, "", (LOGIN_FORM.widget(cx, "",
LoginFormProps{ LoginFormProps{
remember_me: true, remember_me: true,
endpoint: "".to_owned(),
lost_password_url: Some("".to_owned()),
forgot_password_url: Some("".to_owned()),
} }
)) ))
} }

View File

@@ -41,6 +41,14 @@ impl AuthDataRx {
let value = serde_json::to_string(&auth_info).unwrap(); let value = serde_json::to_string(&auth_info).unwrap();
storage.set_item("auth", &value).unwrap(); storage.set_item("auth", &value).unwrap();
} }
// Save into session storage always
let storage: web_sys::Storage = web_sys::window()
.unwrap()
.session_storage()
.unwrap()
.unwrap();
let value = serde_json::to_string(&auth_info).unwrap();
storage.set_item("auth", &value).unwrap();
// Save token to session storage // Save token to session storage
self.username.set(Some(auth_info.username.clone())); self.username.set(Some(auth_info.username.clone()));
@@ -55,6 +63,12 @@ impl AuthDataRx {
let storage: web_sys::Storage = let storage: web_sys::Storage =
web_sys::window().unwrap().local_storage().unwrap().unwrap(); web_sys::window().unwrap().local_storage().unwrap().unwrap();
storage.remove_item("auth").unwrap(); storage.remove_item("auth").unwrap();
let storage: web_sys::Storage = web_sys::window()
.unwrap()
.session_storage()
.unwrap()
.unwrap();
storage.remove_item("auth").unwrap();
// Update state // Update state
self.auth_info.set(None); self.auth_info.set(None);
self.username.set(None); self.username.set(None);
@@ -107,9 +121,24 @@ impl AuthDataRx {
let auth_info = serde_json::from_str(&auth_info).unwrap(); let auth_info = serde_json::from_str(&auth_info).unwrap();
self.handle_log_in(auth_info); self.handle_log_in(auth_info);
} }
None => {
// Try session storage
let storage: web_sys::Storage = web_sys::window()
.unwrap()
.session_storage()
.unwrap()
.unwrap();
let saved_auth = storage.get("auth").unwrap();
match saved_auth {
Some(auth_info) => {
let auth_info = serde_json::from_str(&auth_info).unwrap();
self.handle_log_in(auth_info);
}
None => { None => {
self.state.set(LoginState::NotAuthenticated); self.state.set(LoginState::NotAuthenticated);
} }
} }
} }
}
}
} }