Home
Head's Up: I'm in the middle of upgrading my site. Most things are in place, but there are something missing and/or broken including image alt text. Please bear with me while I'm getting things fixed.

Set, Read, And Delete Cookies In axum

[package]
name = "axum_cookies"
version = "0.1.0"
edition = "2021"

[dependencies]
axum = "0.6" 
tokio = { version = "1", features = ["full"] }
tower-cookies = "0.9"
use axum::response::IntoResponse;
use axum::routing::get;
use axum::{response::Html, Router};
use std::net::SocketAddr;
use tower_cookies::{Cookie, CookieManagerLayer, Cookies};

#[tokio::main]
async fn main() {
    let routes_all = Router::new()
        .route("/", get(set_cookie_handler))
        .route("/read-cookie", get(read_cookie_handler))
        .route("/delete-cookie", get(delete_cookie_handler))
        .layer(CookieManagerLayer::new());
    let addr = SocketAddr::from(([127, 0, 0, 1], 8484));
    axum::Server::bind(&addr)
        .serve(routes_all.into_make_service())
        .await
        .unwrap();
}

async fn set_cookie_handler(cookies: Cookies) -> impl IntoResponse {
    cookies.add(Cookie::new("delta", "echo"));
    Html("Cookie has been sent to browser".to_string())
}

async fn read_cookie_handler(cookies: Cookies) -> impl IntoResponse {
    match cookies.get("delta") {
        Some(cookie) => {
            dbg!(&cookie.value());
            Html(format!("Cookie value is: {}", cookie.value()))
        }
        None => Html(format!("No cookie found")),
    }
}

async fn delete_cookie_handler(cookies: Cookies) -> impl IntoResponse {
    cookies.remove(Cookie::new("delta", ""));
    Html("Cookie deleted".to_string())
}

// add CookieMangerLayer. Must be under
// other routes that want to use cookies

Footnotes And References