问题标签 [actix-web]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2620 浏览

mongodb - 特征`std::convert::From` 没有为`std::io::Error` 实现`

试图在 rust 中使用 actix-web 和 mongodb 制作服务器。得到错误

该特征std::convert::From<mongodb::error::Error>未实现std::io::Error

这是我的代码

我错过了什么吗?

0 投票
0 回答
528 浏览

rust - Actix-Web 运行时错误:线程 'actix-rt:worker:2' 在 'AuthenticationMiddleware 已被调用' 处惊慌失措

我有一个actix-web使用HttpAuthentication中间件对所有请求进行身份验证的服务器。服务器运行良好并且正确响应大多数请求,但偶尔某些请求会触发错误:

thread 'actix-rt:worker:2' panicked at 'AuthenticationMiddleware was called already

对同一端点的请求只会在某些时候触发错误,所以我不确定根本原因是什么。

我的main()功能(仅包含相关代码是:

作为参数validator传递给的函数是:process_fnHttpAuthentication::basic

该功能本质上只是检查请求中发送的基本身份验证用户名和密码的有效性。据我了解,这应该包装服务器上的每个端点,并且只允许经过身份验证的请求通过。

我不明白为什么我会收到此运行时错误。有没有人知道为什么会这样?

0 投票
1 回答
731 浏览

asynchronous - 总是返回 Ok HttpResponse 然后在 actix-web 处理程序中工作

我有一个处理程序来启动密码重置。它总是返回成功的 200 状态码,因此攻击者无法使用它来找出数据库中存储了哪些电子邮件地址。问题是,如果数据库中有一封电子邮件,则需要一段时间才能完成请求(阻止用户查找并发送带有重置令牌的实际电子邮件)。如果用户不在数据库中,请求会很快返回,因此被攻击者会知道电子邮件不存在。

在后台处理请求时,我将如何立即返回 HTTP 响应?

0 投票
1 回答
861 浏览

encryption - 如何为 AES 加密生成随机密钥?

每次收到对我的端点的请求时,我都使用 openssl crate 生成一个随机密钥。我将使用新生成的密钥加密请求数据并将其作为响应发送回。

执行该AesKey::new_encrypt方法时,出现以下错误:

我的要求是每个请求的密钥都必须是随机且唯一的。

编辑1:

谢谢你的回答。现在我已经改变了大小,我现在可以得到一个 AesKey。

修改后的代码:

当我执行这个时,我从 aes_ige 方法中得到一个错误,说:

我尝试增加 outbuf 大小,但仍然遇到与上述相同的错误。

我浏览了文档,它说:

如果 in_ 的长度与 out 的长度不同,如果该长度不是 16 的倍数,或者 iv 不是至少 32 个字节,则会出现恐慌。

我不确定我做错了什么。

编辑2:

感谢您的投入。我能够通过将输入和输出缓冲区的大小调整为与 16 的倍数相同的大小来解决这个问题。

0 投票
1 回答
721 浏览

csv - 如何反序列化actix Web表单数据并将其序列化为csv文件?

如何反序列化 actix_web 表单数据并将其序列化为 csv 文件?是否可以使用一个结构?如何覆盖 csv 错误场景?我正在尝试x-www-form-urlencoded在我的第一个 Rust 程序中将表单数据保存到 csv 文件中,但是与 Ruby 相比,这种语言非常严格;)如何将负责保存到 csv 的代码移动到专用函数?

我有以下错误:

使用的库:

0 投票
1 回答
341 浏览

rust - 如何从使用 actix_web::HttpRequest 获取 json 到结构中?

将 json 从 HttpRequest 获取到您创建的结构中的最简单方法是什么。这是 main.rs

这是 model/tour.rs 中的结构:

这是 handlers/tours.rs:: 中的处理程序

我尝试了这种变体,因为我认为这会使代码变得非常简单:

但是得到了错误:

我应该在 TourForm 结构中实现 FromRequest 函数还是有更简单的方法?

0 投票
1 回答
596 浏览

rust - 不遵守 Actix PayloadConfig 限制

我在 Actix 中设置有效负载限制时遇到问题。无论我如何尝试配置它(使用 app_data、数据、服务级别等),我总是会收到带有正文A payload reached size limit.和以下日志的 413 http 响应:Error in response: Overflow

这是代码

其中代理是:

我也尝试设置其他配置,例如

但它也没有用

0 投票
5 回答
8346 浏览

authentication - 如何在 actix-web 中创建受保护的路由

我需要验证用户是否有权访问某些路线。我已经创建了 3 个“范围”(guest、auth-user、admin),现在我不知道如何检查用户是否可以访问这些路由。

我正在尝试实现 auth-middleware,这个中间件应该检查​​用户是否拥有正确的 cookie 或令牌。(我能够从请求标头中打印出一个 cookie),但我不知道如何导入、使用 actix_identity 以及访问此中间件中的 id 参数。

我相信我的问题不仅与 Actix 身份有关,而且我无法在中间件中传递参数。

我尝试过的资源:

  1. 为 Actix API 创建身份验证中间件 https://www.jamesbaum.co.uk/blether/creating-authentication-middleware-actix-rust-react/

  2. 中间件中的 Actix-web 令牌验证https://users.rust-lang.org/t/actix-web-token-validation-in-middleware/38205

  3. Actix 中间件示例https://github.com/actix/examples/tree/master/middleware

也许我认为完全错误并且 auth-middleware 不是解决我的问题的最佳解决方案。我希望你能帮我创建“受保护的路线”

0 投票
1 回答
892 浏览

websocket - 向具有多个 websocket 引用的客户端发送消息

我的问题是在将 actix-web 与 Rust 一起使用的背景下。

不幸的是,如果没有一个庞大的代码示例,我无法解释这一点,所以让我从这个开始。

让我先解释一下我要做什么。当我的客户端连接时,我与他们建立了一个 websocket。我需要这些 websocket 的列表,所以当游戏发生变化时,我可以将更新推送到所有客户端。

我将该函数绑定play_gameplay_game路由的处理程序。在这个函数中,我将 HTTP get 请求升级为 websocket。在此之前,我复制了一个游戏的 Arc+RwLock 并将其传递给 MyWs,即 websocket 结构。你可以在handleStreamHandler的MyWs impl的函数中看到我修改了Game(带some_method函数)。到目前为止这很好。

当我尝试获取对 websocket 的多个引用时,事情就会爆炸。你可以看到play_game我调用add_websocket,给 Game 一个对它的引用,所以它可以在发生变化时将更新推送回所有客户端。例如,在调用 之后some_method,我们将调用push_updates。这样做的问题是ws::start不接受 Arc,它必须接受一个 Actor,该 Actor 使用 WebSocketContext 实现 StreamHandler。

所以我主要的两个问题是:

  1. 我需要一种方法来保留对 websocket 的多个引用,这样我就可以从多个位置与客户端交谈(阅读:线程)。
  2. 我需要一些方法来做到这一点。我不确定在 actix 中如何在 MyWs 演员的上下文之外实际将消息发送回客户端。框架将 WebSocketContext 传递给handle,但我不知道如何自己动手。

我解决这个问题的想法:

  1. 在 MyWs 的handle(或started)函数中,将对 Context 的引用传递到self.game. 这不起作用,因为我要移出一个可变的 ref。
  2. 自己ws::start做一个可以参考的。我还没有尝试过,因为看起来我最终会重写很多。
  3. 以某种方式在 Arc 上实现 Actor 和 StreamHandler,或者我自己的具有内部可变性的结构/允许我保留对它的多个引用的东西。

这并不能真正帮助我发回消息,因为我仍然不知道如何通过handle函数上下文之外的 websocket 发回消息。

对不起这个问题的长度。tl;dr 是,如何在 actix-web 中获取对 websocket 的多个引用并使用它们向客户端发送消息?

以下是我正在使用的每个组件的相关文档:

0 投票
2 回答
782 浏览

rust - 如何在 actix-web 服务器启动时运行回调函数?

目前我的主要功能,服务器开始的地方看起来像这样

一旦服务器启动,我想运行一个(异步)函数,向另一台服务器发出请求,并且该服务器应该向刚刚启动并运行的该服务器发出另一个请求。

不确定我在文档中是否看到任何提及仅在服务器启动时运行一次的回调函数。

例如,也许有它的run()功能,像这样:

编辑 我想我解决了,当我可以回答我自己的问题时会发布答案