[−][src]Trait roa::cookie::CookieGetter
A context extension.
This extension must be used in downstream of middleware cookier_parser
,
otherwise you cannot get expected cookie.
Example
use roa::cookie::cookie_parser; use roa::App; use roa::preload::*; use roa::http::{StatusCode, header::COOKIE}; use async_std::task::spawn; #[tokio::main] async fn main() -> Result<(), Box<dyn std::error::Error>> { // downstream of `cookie_parser` let (addr, server) = App::new(()) .gate(cookie_parser) .end( |mut ctx| async move { assert_eq!("Hexilee", ctx.must_cookie("name")?.value()); Ok(()) }) .run()?; spawn(server); let client = reqwest::Client::new(); let resp = client .get(&format!("http://{}", addr)) .header(COOKIE, "name=Hexilee") .send() .await?; assert_eq!(StatusCode::OK, resp.status()); // miss `cookie_parser` let (addr, server) = App::new(()) .end( |ctx| async move { assert!(ctx.cookie("name").is_none()); Ok(()) }) .run()?; spawn(server); let resp = client .get(&format!("http://{}", addr)) .header(COOKIE, "name=Hexilee") .send() .await?; assert_eq!(StatusCode::OK, resp.status()); Ok(()) }
Required methods
fn must_cookie(&mut self, name: &str) -> Result<Arc<Cookie<'static>>>
Must get a cookie, throw 401 UNAUTHORIZED if it not exists.
Example
use roa::cookie::cookie_parser; use roa::App; use roa::preload::*; use roa::http::{StatusCode, header::COOKIE}; use async_std::task::spawn; #[tokio::main] async fn main() -> Result<(), Box<dyn std::error::Error>> { // downstream of `cookie_parser` let (addr, server) = App::new(()) .gate(cookie_parser) .end( |mut ctx| async move { assert_eq!("Hexilee", ctx.must_cookie("name")?.value()); Ok(()) }) .run()?; spawn(server); let resp = reqwest::get(&format!("http://{}", addr)).await?; assert_eq!(StatusCode::UNAUTHORIZED, resp.status()); Ok(()) }
fn cookie(&self, name: &str) -> Option<Arc<Cookie<'static>>>
Try to get a cookie, return None
if it not exists.
Example
use roa::cookie::cookie_parser; use roa::App; use roa::preload::*; use roa::http::{StatusCode, header::COOKIE}; use async_std::task::spawn; #[tokio::main] async fn main() -> Result<(), Box<dyn std::error::Error>> { // downstream of `cookie_parser` let (addr, server) = App::new(()) .gate(cookie_parser) .end( |ctx| async move { assert!(ctx.cookie("name").is_none()); Ok(()) }) .run()?; spawn(server); let resp = reqwest::get(&format!("http://{}", addr)).await?; assert_eq!(StatusCode::OK, resp.status()); Ok(()) }