我有一个简单的中间件,用于访问应用程序的全局状态,以执行身份验证令牌的验证:
use actix_web;
use actix_web::HttpMessage;
pub struct Authenticator;
impl<S> actix_web::middleware::Middleware<S> for Authenticator {
fn start(
&self,
request: &mut actix_web::HttpRequest<S>,
) -> actix_web::Result<actix_web::middleware::Started> {
//let _state = request.state() as &::application::State;
match request.headers().get("Authentication") {
Some(_) => Ok(actix_web::middleware::Started::Done),
None => Err(::view::error(
"No authentication header provided",
actix_web::http::StatusCode::FORBIDDEN,
)),
}
}
}
注释字符串显示了我如何尝试获取状态。实际上我试过很多方法。做这种事的最好方法是什么?
我考虑过添加对所需数据的引用(例如
Arc
D
RwLock
)致
Authenticator
在注册我的中间商时,使用引用构造它。
我仍然不擅长品质方面的东西,但必须有一个干净的方法来铸造
S
定义的应用程序类型
State
结构:
pub struct State {
pub database: actix::Addr<actix::Syn, ::database::Actor>,
pub cache: ::std::sync::Arc<::cache::Cache>,
pub sessions: ::std::sync::Arc<::session::Storage>,
}