首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Warp检查授权头?

如何使用Warp检查授权头?
EN

Stack Overflow用户
提问于 2019-03-04 17:23:27
回答 1查看 3.9K关注 0票数 7

我正在构建一个带锈蚀和翘曲的graphql。我已经查看了这些文档,但我仍然没有弄清楚如何链接过滤器,特别是检查请求头中的authorization

代码语言:javascript
复制
let context_extractor = warp::any()
    // this code rejects all request which doesn't contain the authorization in header
    // I'd like to make to check if authorization in header
    .and(warp::header::<String>("authorization"))
    .map(|token: String| -> Context {
        let token_data = match verify_jwt(token) {
            Ok(t) => t,
            Err(_) => return Context { user_id: 0 },
        };

        Context {
            user_id: token_data.claims.user_id,
        }
    });

let handle_request = move |context: Context,
                           request: juniper::http::GraphQLRequest|
      -> Result<Vec<u8>, serde_json::Error> {
    serde_json::to_vec(&request.execute(&schema, &context))
};

warp::post2()
    .and(warp::path(path.into()))
    .and(context_extractor)
    .and(warp::body::json())
    .map(handle_request)
    .map(build_response)
    .boxed()

这是我的代码。它工作得很好,但有一个问题。我已经用context_extractor设置了一个路由.and(warp::header::<String>("authorization"),然后它拒绝所有在头中不包含authorization的请求。

我怎么才能

  1. 如果请求头中有一个authorization,那么返回带有适当user_idContext
  2. 如果没有,则返回带有Contextuser_id: 0
EN

回答 1

Stack Overflow用户

发布于 2019-03-05 02:04:09

我在github版的翘曲中找到了解决方案

这里有一个小片段。

代码语言:javascript
复制
let context_extractor = warp::any().and(
    warp::header::<String>("authorization")
        .map(|token: String| -> Context {
            let token_data = match verify_jwt(token) {
                Ok(t) => t,
                Err(_) => return Context { user_id: 0 },
            };

            Context {
                user_id: token_data.claims.user_id,
            }
        })
        .or(warp::any().map(|| Context { user_id: 0 }))
        .unify(),
);
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54988438

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档