我正在制作一个授权系统,它将实现FromRequest
web 框架火箭的特征,这是制作自定义警卫所必需的。
我遇到的第一个问题是我必须如何使连接成为全球性的。我应该将它转换为常量,以便可以从实现中的函数访问它,还是火箭中的缓存或某种形式的存储PgPool
可以访问连接(因为我使用的是 sqlx)& 可以进行查询.
我遇到的第二个问题是使 FromRequest 函数异步。由于 sqlx 是本机异步 afaik,我不知道火箭是否还支持这一点。我正在考虑制作一个 tokio 线程,或者是否有.then()
Rust 的版本,但我不知道
#[derive(Debug)]
struct User {
username: String,
password: String,
user_id: i16,
phone_number: String,
display_name: String,
//other fields omitted
}
impl<'a, 'r> FromRequest<'a, 'r> for &'a User {
type Error = !;
fn from_request(request: &'a Request<'r>) -> request::Outcome<&'a User, !> {
let user_result = request.local_cache(|| {
//..need to fetch user with sqlx [but sqlx is async]
//and later get cookies and check
});
user_result.as_ref().or_forward(())
}
}