gpt4 book ai didi

rust - 从请求获取 token 时,生命周期与特征中的方法不匹配

转载 作者:行者123 更新时间:2023-12-02 18:32:23 25 4
gpt4 key购买 nike

我正在学习 Rust。现在我使用此代码从 Rust Rocket 中的 HTTP 请求 header 获取 accessToken:

use rocket::request::FromRequest;
use rocket::{Request, request};
use rocket::outcome::Outcome;
use rocket::http::Status;

struct Token(String);

#[derive(Debug)]
enum ApiTokenError {
Missing,
Invalid,
}

impl<'a, 'r> FromRequest<'a> for Token {
type Error = ApiTokenError;

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()))
}
None => Outcome::Failure((Status::Unauthorized, ApiTokenError::Missing)),
}
}
}

当我编译项目时,它显示如下错误:

error[E0195]: lifetime parameters or bounds on method `from_request` do not match the trait declaration
--> src/token.rs:17:20
|
17 | fn from_request(request: &'a Request<'r>) -> request::Outcome<Self, Self::Error> {
| ^ lifetimes do not match method in trait

代码哪里出了问题,我应该如何解决这个问题?

最佳答案

FromRequest 是一个异步特征。您需要附加该标记,并使其异步。不过,您不需要限制请求值的生命周期(因此不需要两个生命周期参数;您可以使用 '_):

#[rocket::async_trait]
impl<'r> FromRequest<'r> for Token {
type Error = ApiTokenError;

async fn from_request(request: &'r Request<'_>) -> request::Outcome<Self, Self::Error> {
...
}
}

关于rust - 从请求获取 token 时,生命周期与特征中的方法不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69271458/

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