作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我会在 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/
我是一名优秀的程序员,十分优秀!