gpt4 book ai didi

rust - 如何从 Rocket 的请求中检索 HTTP header ?

转载 作者:行者123 更新时间:2023-12-03 11:28:31 26 4
gpt4 key购买 nike

我会在 Python 中使用 Flask 做这样的事情:

@app.route('/login/', methods=['POST'])
def login():
token = request.headers["token"]
我不知道如何访问 token header 并将其存储为 String多变的。
#![feature(proc_macro_hygiene, decl_macro)]

use rocket::{
config::{Config, Environment},
*,
};

fn main() {
let config = Config::build(Environment::Production)
.address("0.0.0.0")
.port(PORT)
.finalize()
.unwrap();

rocket::ignite().mount("/", routes![login]).launch();
}

#[post("/login")]
fn login() {

// Retrieve headers from request.
}

最佳答案

Rocket处理程序基于请求保护。您不会直接访问处理程序中的请求。相反,您创建一个实现 FromRequest 的类型。 .
您可以创建一个包含字符串的 token 结构:

struct Token(String);
并实现 FromRequest对于 token :
impl<'a, 'r> FromRequest<'a, 'r> for Token {
type Error = Infallible;

fn from_request(request: &'a Request<'r>) -> request::Outcome<Self, Self::Error> {
let token = request.headers().get_one("token");
match token {
Some(token) => {
// check validity
Outcome::Success(Token(token.to_string()))
},
// token does not exist
None => Outcome::Failure(Status::Unauthorized)
}
}
}
现在您可以使用该 Token作为请求守卫:
#[post("/login")]
fn login(token: Token) {
}
如果 from_request Token 的方法失败,一个 Status::Unauthorized将被退回。否则,您的处理程序将被调用,您可以处理身份验证逻辑。

关于rust - 如何从 Rocket 的请求中检索 HTTP header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64829301/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com