pub fn require_auth(ctx: &Context) -> Result<&Identity, Error>Examples found in repository?
examples/homepage.rs (line 70)
50async fn main() -> std::io::Result<()> {
51 let addr: SocketAddr = ([127, 0, 0, 1], 3000).into();
52 let db = Db::memory().await.expect("db connect");
53 auth::ensure_core_tables(&db)
54 .await
55 .expect("create auth tables");
56 auth::user::create(&db, "admin@example.com", "admin", "admin")
57 .await
58 .expect("seed admin user");
59
60 let router = with_defaults(Router::new())
61 .get("/whoami", |req, _params| async move {
62 let id = req
63 .ctx()
64 .get::<RequestId>()
65 .map(|r| r.0.to_string())
66 .unwrap_or_else(|| "unknown".into());
67 Ok::<Response, Error>(text(format!("your request id is req-{id}\n")))
68 })
69 .get("/me", |req, _params| async move {
70 let id = require_auth(req.ctx())?;
71 Ok::<Response, Error>(text(format!("hello {}\n", id.email)))
72 })
73 .get("/admin-only", |req, _params| async move {
74 let id = require_admin(req.ctx())?;
75 Ok::<Response, Error>(text(format!("hello admin {}\n", id.email)))
76 })
77 .get("/crash", |_req, _params| async {
78 Err::<Response, Error>(Error::Internal("simulated failure".into()))
79 })
80 .get("/unauth", |_req, _params| async {
81 Err::<Response, Error>(Error::Unauthorized)
82 })
83 .wrap(request_id)
84 .wrap(authenticate(db))
85 .wrap(logger);
86 Server::bind(addr).serve_router(router).await
87}