mirror of
https://github.com/actix/actix-extras.git
synced 2024-11-27 09:12:57 +01:00
docs(httpauth): rework example
This commit is contained in:
parent
20234ec555
commit
515a727ca3
@ -32,3 +32,5 @@ pin-project-lite = "0.2.7"
|
||||
actix-cors = "0.7"
|
||||
actix-service = "2"
|
||||
actix-web = { version = "4.1", default-features = false, features = ["macros"] }
|
||||
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
|
||||
tracing = "0.1.30"
|
||||
|
@ -1,24 +1,57 @@
|
||||
use actix_web::{dev::ServiceRequest, middleware, web, App, Error, HttpServer};
|
||||
use actix_web_httpauth::{extractors::basic::BasicAuth, middleware::HttpAuthentication};
|
||||
use actix_web::{
|
||||
dev::ServiceRequest, error, get, middleware::Logger, App, Error, HttpServer, Responder,
|
||||
};
|
||||
use actix_web_httpauth::{extractors::bearer::BearerAuth, middleware::HttpAuthentication};
|
||||
use tracing::level_filters::LevelFilter;
|
||||
use tracing_subscriber::EnvFilter;
|
||||
|
||||
/// Validator that:
|
||||
/// - accepts Bearer auth;
|
||||
/// - returns a custom response for requests without a valid Bearer Authorization header;
|
||||
/// - rejects tokens containing an "x" (for quick testing using command line HTTP clients).
|
||||
async fn validator(
|
||||
req: ServiceRequest,
|
||||
_credentials: BasicAuth,
|
||||
credentials: Option<BearerAuth>,
|
||||
) -> Result<ServiceRequest, (Error, ServiceRequest)> {
|
||||
let Some(credentials) = credentials else {
|
||||
return Err((error::ErrorBadRequest("no bearer header"), req));
|
||||
};
|
||||
|
||||
eprintln!("{credentials:?}");
|
||||
|
||||
if credentials.token().contains('x') {
|
||||
return Err((error::ErrorBadRequest("token contains x"), req));
|
||||
}
|
||||
|
||||
Ok(req)
|
||||
}
|
||||
|
||||
#[get("/")]
|
||||
async fn index(auth: BearerAuth) -> impl Responder {
|
||||
format!("authenticated for token: {}", auth.token().to_owned())
|
||||
}
|
||||
|
||||
#[actix_web::main]
|
||||
async fn main() -> std::io::Result<()> {
|
||||
tracing_subscriber::fmt()
|
||||
.with_env_filter(
|
||||
EnvFilter::builder()
|
||||
.with_default_directive(LevelFilter::INFO.into())
|
||||
.from_env_lossy(),
|
||||
)
|
||||
.without_time()
|
||||
.init();
|
||||
|
||||
HttpServer::new(|| {
|
||||
let auth = HttpAuthentication::basic(validator);
|
||||
let auth = HttpAuthentication::with_fn(validator);
|
||||
|
||||
App::new()
|
||||
.wrap(middleware::Logger::default())
|
||||
.service(index)
|
||||
.wrap(auth)
|
||||
.service(web::resource("/").to(|| async { "Test\r\n" }))
|
||||
.wrap(Logger::default().log_target("@"))
|
||||
})
|
||||
.bind("127.0.0.1:8080")?
|
||||
.workers(1)
|
||||
.workers(2)
|
||||
.run()
|
||||
.await
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user