routeにmiddlewareをくっつけます。
Requestのheadersからcookieを取得します。
#[tokio::main]
async fn main() {
let app = axum::Router::new()
.route("/", axum::routing::get(handle_index))
.layer(middleware::from_fn(my_middleware));
let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
axum::serve(listener, app).await.unwrap();
}
//
async fn my_middleware(req: Request,
next: Next,) -> impl IntoResponse {
let mut session_token = req
.headers()
.get_all("Cookie")
.iter()
.filter_map(|cookie| {
cookie
.to_str()
.ok()
.and_then(|cookie| cookie.parse::<cookie::Cookie>().ok())
})
.find_map(|cookie| {
(cookie.name() == "hoge".to_string()).then(move || cookie.value().to_owned())
});
println!("{:?}", &session_token);
let cookies = req.headers().get("cookie");
println!("{:?}", &cookies);
let mut res = next.run(req).await;
res
}
Finished `dev` profile [unoptimized + debuginfo] target(s) in 3.60s
Running `target/debug/axum`
Some(“value”)
Some(“hoge=value”)
hoge=value; Max-Age=600
ほう、なるほど。middlewareにリダイレクトを追加したい。