在 HttpResponse 中设置授权 header 引发 "borrowed value does not live long enough"

Setting Authorization header in HttpResponse throws "borrowed value does not live long enough"

我正在使用 actix-web 在 REST api 中对用户进行身份验证。用于验证用户的端点将响应 object 的“授权”header 设置为生成的令牌。

async fn signin(request: web::Json<UserAndPw>) -> impl Responder {
  let token = String::from("thisisatest");
  HttpResponse::Ok()
    .header(AUTHORIZATION, HeaderValue::from_static(&token))
    .json(ApiResponse {...})
}

这是编译时出现的错误:

.header(AUTHORIZATION, HeaderValue::from_static(&test_token))
                       -------------------------^^^^^^^^^^^-
   |                   |                        |
   |                   |                        borrowed value does not live long enough
   |                   argument requires that `test_token` is borrowed for `'static`

在您的情况下,token 是一个局部变量,对它的引用 (&token) 绝对不是静态生命周期。编译器错误解释并显示给你。

您可能想通过其他方式创建 HeaderValue 实例,而不是通过 from_static。例如:HeaderValue::from_str(&token).