我会在Python中使用flask做类似的事情:
@app.route('/login/', methods=['POST'])
def login():
token = request.headers["token"]
我无法弄清楚如何访问token
标头并将其存储为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
。
您可以创建一个包含字符串的令牌结构:
struct Token(String);
并实现FromRequest
令牌:
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
将返回a。否则,将调用您的处理程序,并且您可以处理身份验证逻辑。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句