diff --git a/src/main.rs b/src/main.rs index 89faaed..6b49096 100644 --- a/src/main.rs +++ b/src/main.rs @@ -445,7 +445,14 @@ async fn login( async fn logout( State(app): State>, cookie: Option>, + referrer: Option>, ) -> impl IntoResponse { + let referrer = referrer + .map(|TypedHeader(referrer)| referrer.to_string()) + .map(|referrer| Url::parse(&referrer).ok()) + .flatten(); + let return_to = referrer.as_ref().map(|url| url.path()).unwrap_or("/"); + if let Some(session_cookie) = cookie.as_deref().and_then(|cookie| cookie.get(COOKIE_NAME)) { if let Ok(Some(cookie)) = app.session_store.load_session(session_cookie.into()).await { let _ = app.session_store.destroy_session(cookie).await; @@ -462,7 +469,7 @@ async fn logout( )) .expect("invalid cookie"), ), - (LOCATION, HeaderValue::from_str("/").unwrap()), + (LOCATION, HeaderValue::from_str(return_to).unwrap()), ], ) }