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

2024-04-21

我正在使用 Rust 和 Warp 构建 graphql api。我已经浏览了文档,但我仍然不知道如何链接过滤器,特别是检查authorization在请求头中。

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 with .and(warp::header::<String>("authorization"),然后它拒绝所有不包含的请求authorization在标题中。

我怎样才能使

  1. 如果请求标头有authorization在标题中,然后返回Context与适当的user_id

  2. 如果没有,则返回Context with user_id: 0?


我找到了solution https://github.com/seanmonstar/warp/issues/177#issuecomment-469497434在 Warp 的 github 问题中。

这是一个小片段。

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(),
);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Warp 检查授权标头? 的相关文章

随机推荐

  • 在多个自定义模块支持的多个脚本中使用 python 的 argparse

    我正在构建一组用于管理我们的基础设施的脚本和模块 为了让事情井井有条 我想整合尽可能多的努力 并尽量减少新脚本的样板代码 特别是这里的问题是整合 ArgumentParser 模块 一个示例结构是让脚本和库组织如下 bin script1
  • 如何在 C++ 中调用不同项目的方法?

    使用 Visual Studio 时 我通常使用 C 工作 因此 C 中的某些内容让我感到困惑 概念看起来如此不同 但名称几乎相同 我创建了一个控制台项目 我想在其中运行另一个项目以进行测试 我将该项目添加为控制台应用程序的引用 然后陷入困
  • 如何将图像文件从文档目录上传到iphone中的php服务器

    我目前正在开发画廊类的 iPhone 应用程序 根据我的要求 我需要将所有相机捕获的图像存储到文档目录中 文档文件夹中有一些 10 20 个图像文件 之后我必须使用单个 php url 将应用程序资源文档文件夹推送到服务器上 我已附加屏幕截
  • C# 中的省略号表示法?

    我在哪里可以获得有关实现我自己的带有省略号符号的方法的信息 e g static void my printf char format 这也是所谓的省略符号还是有一个更奇特的名字 看看参数关键字 https learn microsoft
  • 多边形来自折线?

    我正在尝试自动从折线创建多边形 到目前为止 我一直在正确计算折线每个部分的外推边 条件 基线和边之间的距离是常数 如何从基点 红色点 计算边 蓝色点 的角点 这是我在 Qt 中的代码 这对我来说很好用 QPolygonF projectPL
  • 使用 BeautifulSoup 抓取网页中的链接标题和 URL

    我有一个流行文章的网页 我想抓取每个引用网页的超链接及其所显示文章的标题 我的脚本所需的输出是一个 CSV 文件 其中在一行中列出了每个标题和文章内容 因此 如果该网页上有 50 篇文章 我想要一个包含 50 行和 100 个数据点的文件
  • Hibernate - 限制嵌套集合的大小

    我有以下型号 Entity Data public class Book Id GeneratedValue strategy GenerationType IDENTITY private Long id private String a
  • SwiftUI macOS 在文本字段处于活动状态时使用箭头键滚动列表

    我想使用 SwiftUITextField https developer apple com documentation swiftui textfield和一个 SwiftUIList https developer apple com
  • 使用 C# 获取 Active Directory 用户数据

    我想获取有关特定用户的数据 我知道该用户的 OU 路径 但无法使用该 OU 路径获取信息 总是说找不到用户 谁能告诉我我需要更改搜索过滤器吗 请帮忙 Code 用户路径 abc ds xyz net fGroup xcxc Users 12
  • Spring data Cassandra 对 UDT 的注释 [重复]

    这个问题在这里已经有答案了 springdatacassandra如何支持POJO中Cassandra提供的用户定义数据类型 我正在寻找 UDT 的注释 Spring data cassandra 最新版本 1 2 0 BUILD SNAP
  • 在 Google Chrome 中使用“i18n-content”进行国际化

    The 官方文档 http code google com chrome extensions i18n html建议检索字符串以进行国际化 如下所示 document querySelector appname innerHTML chr
  • 什么时候应该更喜欢 Kotlin 扩展函数?

    在 Kotlin 中 至少有一个参数的函数可以定义为常规非成员函数或定义为扩展功能 https kotlinlang org docs reference extensions html extension functions其中一个参数是
  • 如何使用reportlab添加PDF中的总页数

    def analysis report request response HttpResponse mimetype application pdf response Content Disposition attachment filen
  • 使用log4j2.xml初始化slf4j

    我想使用 slf4j 而不是 log4j 我在 pom xml 中添加了以下依赖项 我对 slf4j 使用 1 7 25 对 log4j2 使用 2 10 0
  • 在 Eclipse 首选项中看不到 PHP 内容类型?

    我有一个带有 PDT 的新 eclipse Juno 安装 我导入了我的首选项 除了在内容类型部分我没有看到 PHP 内容类型之外 一切似乎都工作正常 我看到 php 内容类型为 content typ name0 如屏幕截图所示 这有什么
  • 获取 Android 中当前的活跃用户

    我正在寻找一种方法来获取 Android 中当前的活跃用户 我正在构建一个系统应用程序 以便我可以使用隐藏方法 但具体来说它必须是当前的活动用户 而不是给定进程的用户 例如 如果您使用 ADB 安装应用程序 则进程会显示用户 ID 是所有者
  • ASP.NET 5、MVC 6、Web API -> ModelState.IsValid 始终返回 true

    我看过很多关于 IsValid 的帖子总是正确的 但没有一个能帮助我解决这个问题 我也在使用 MVC5 的 ASP NET 4 中看到了这个问题 很明显我在某个地方错过了一步 控制器方法 public IHttpActionResult P
  • 从 spring-cloud-sleuth 切换到微米追踪后,Brave Baggage 无法工作

    我正在将我的 spring 项目更新到较新的版本 更新后我收到以下消息 由于以下原因 您的项目设置与我们的要求不兼容 Spring Cloud Sleuth 与此 Spring Cloud 版本系列不兼容 操作 考虑应用以下操作 从 Spr
  • 打开弹出窗口时 Chrome 扩展程序损坏 [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 Chrome 扩展程序在尝试打开时崩溃popup https developer chrome com extensio
  • 如何使用 Warp 检查授权标头?

    我正在使用 Rust 和 Warp 构建 graphql api 我已经浏览了文档 但我仍然不知道如何链接过滤器 特别是检查authorization在请求头中 let context extractor warp any this cod