Added logout feature
This commit is contained in:
parent
16dac8941b
commit
1dd0b7caaa
@ -26,6 +26,20 @@ async function click(ev) {
|
|||||||
|
|
||||||
count.value = await get_clicks()
|
count.value = await get_clicks()
|
||||||
}
|
}
|
||||||
|
async function signout(ev) {
|
||||||
|
ev.preventDefault()
|
||||||
|
|
||||||
|
const api_url = '/api/auth'
|
||||||
|
const fetch_options = {
|
||||||
|
method: 'DELETE',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let resp = await fetch(api_url, fetch_options)
|
||||||
|
console.log(resp)
|
||||||
|
window.location.reload()
|
||||||
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
@ -33,6 +47,7 @@ async function click(ev) {
|
|||||||
<main class="form-signin w-100 m-auto">
|
<main class="form-signin w-100 m-auto">
|
||||||
<p class="mt-5 mb-3 text-body">You have accessed this content {{ count }} times this session.</p>
|
<p class="mt-5 mb-3 text-body">You have accessed this content {{ count }} times this session.</p>
|
||||||
<button type="submit" @click="click" class="btn btn-primary w-100 py-2">Refresh Content</button>
|
<button type="submit" @click="click" class="btn btn-primary w-100 py-2">Refresh Content</button>
|
||||||
|
<button type="submit" @click="signout" class="btn btn-primary w-100 py-2">Sign out</button>
|
||||||
</main>
|
</main>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|||||||
16
src/main.rs
16
src/main.rs
@ -3,7 +3,7 @@
|
|||||||
use futures_util::{SinkExt, StreamExt};
|
use futures_util::{SinkExt, StreamExt};
|
||||||
use poem::{
|
use poem::{
|
||||||
//get,
|
//get,
|
||||||
handler, //Result,
|
handler,
|
||||||
listener::TcpListener,
|
listener::TcpListener,
|
||||||
session::{CookieConfig, MemoryStorage, ServerSession, Session},
|
session::{CookieConfig, MemoryStorage, ServerSession, Session},
|
||||||
web::{
|
web::{
|
||||||
@ -12,6 +12,7 @@ use poem::{
|
|||||||
},
|
},
|
||||||
EndpointExt,
|
EndpointExt,
|
||||||
IntoResponse,
|
IntoResponse,
|
||||||
|
Result,
|
||||||
Route,
|
Route,
|
||||||
Server,
|
Server,
|
||||||
};
|
};
|
||||||
@ -222,6 +223,12 @@ impl Api {
|
|||||||
UserResponse::AuthError
|
UserResponse::AuthError
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#[oai(path = "/auth", method = "delete", tag = "ApiTags::User")]
|
||||||
|
async fn deauth_user(&self, session: &Session) -> Result<()> {
|
||||||
|
session.purge();
|
||||||
|
Result::Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
#[oai(path = "/auth", method = "post", tag = "ApiTags::User")]
|
#[oai(path = "/auth", method = "post", tag = "ApiTags::User")]
|
||||||
async fn auth_user(&self, user: Json<UserLogin>, session: &Session) -> UserResponse {
|
async fn auth_user(&self, user: Json<UserLogin>, session: &Session) -> UserResponse {
|
||||||
let password = user.password.as_str();
|
let password = user.password.as_str();
|
||||||
@ -249,10 +256,11 @@ impl Api {
|
|||||||
if let None = session.get::<String>("user") {
|
if let None = session.get::<String>("user") {
|
||||||
return NumResponse::AuthError;
|
return NumResponse::AuthError;
|
||||||
}
|
}
|
||||||
match session.get("num") {
|
match session.get::<u32>("num") {
|
||||||
Some(i) => {
|
Some(i) => {
|
||||||
session.set("num", i + 1);
|
let new: u32 = i + 1;
|
||||||
NumResponse::Ok(Json(i))
|
session.set("num", new);
|
||||||
|
NumResponse::Ok(Json(new))
|
||||||
}
|
}
|
||||||
None => {
|
None => {
|
||||||
session.set("num", 1_u32);
|
session.set("num", 1_u32);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user