cookieを判定するmiddlewareを作成し、privateなページのみミドルウェアをつけて、publicなページにはつけない。
該当のsession_tokenがない場合は、Redirectでpublicのページにリダイレクトさせる。
async fn main() {
let public_router = Router::new()
.route("/setcookie", get(handle_setcookie))
.route("/public", get(handle_public));
let private_router = Router::new()
.route("/test", get(handle_index))
.route("/private", get(handle_private))
.layer(middleware::from_fn(my_middleware));
let app = Router::new()
.nest("/", public_router)
.nest("/", private_router);
let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
axum::serve(listener, app).await.unwrap();
}
//
if session_token == None {
Redirect::permanent("/public").into_response()
} else {
let mut res = next.run(req).await;
res
}
おおおおおおお、昨日長時間悶絶してただけあって、ここは割と簡単に上手くいった。