如何使用 Fairing 拒绝 Rocket 中的传入请求?

问题描述 投票:0回答:1

我正在尝试检查用户是否使用

Fairing
发送了 cookie,但我无法找到通过阻止传入请求来拒绝传入请求的解决方案。

#[rocket::async_trait]
impl Fairing for LoginCheck {
    fn info(&self) -> Info {
        Info {
            name: "Login Check",
            kind: Kind::Request | Kind::Response,
        }
    }

    async fn on_request(&self, request: &mut Request<'_>, _: &mut Data<'_>) {
        let auth_cookie = request.cookies().get("auth")
        // block the request here
    }

    async fn on_response<'r>(&self, _request: &'r Request<'_>, response: &mut Response<'r>) {
        response.set_header(Cookie::new("auth", "test cookie"));
    }
}

我想知道一种阻止请求的方法,或者是否有其他方法可以解决路由处理程序不必检查用户是否已发送 cookie 的问题。

rust middleware rust-rocket
1个回答
0
投票

您不能使用

Fairing
来短路请求-响应流程。 文档说:

收到请求后立即调用请求回调。请求回调可以随意修改请求并查看传入的数据。但是,它可能不会中止或直接响应请求;通过请求防护或响应回调可以更好地处理这些问题。

特别是身份验证:

警告

[..] 您应该使用整流罩来实现身份验证或授权除非身份验证或授权适用于所有或绝大多数应用程序。

即使如此,你也只能在某种程度上在整流罩中实现身份验证;您可以进行令牌验证、用户查找和权限检查。但要真正对这些信息进行行动,需要处理程序中的逻辑,或者可能更好的是请求防护,它可以通过身份验证公平读取存储在请求本地缓存中的内容。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.