gpt4 book ai didi

rust - 将Actix Identity与Juniper GraphQL结合使用

转载 作者:行者123 更新时间:2023-12-03 11:48:05 29 4
gpt4 key购买 nike

我使用Actix Identity with Cookie Policy来存储用户 session ,并使用Juniper从REST迁移到GraphQL。
通过使用actix identity在GraphQL中创建一个登录端点会很棒。
在Actix中使用Juniper,我必须将GraphQL请求移到web::block

actix_web::web::block(|| move {
let graphql_response = request.execute(&data, &context);

Ok::<_, serde_json::error::Error>(serde_json::to_string(&graphql_response)?)
})
然后将Identity作为 Juniper Context传递给Juniper以执行查询 login
struct Context {
identity: Identity,
connection_pool: DatabaseConnectionPool
}
唯一的问题是,由于线程安全,我无法将 Actix Identity传递给 web::block
std::rc::Rc<actix_web::request::HttpRequestInner>` cannot be sent between threads safely
由于无法将 identity传递给线程安全性的问题,我想到了另一种解决方案。
通过强制Juniper返回一个附加字段来读取 web::block的外部线程并执行,例如:
struct Result {
data: Juniper_output_or_something,
action: special_action_field_which_return_on_every_query_to_outside_thread_safety
}
我能想到的解决方法是以某种方式将Actix Identity传递到 web::block或强制Juniper返回其他字段以在 web::block之外执行。
有什么建议吗?

最佳答案

Identity将数据编码为字符串,您可以将其拉出并传递。
将您的Context更改为:

struct Context {
identity: Option<String>,
connection_pool: DatabaseConnectionPool,
}
并且在构造它时,请使用 identity.identity()获得 Option<String>

关于rust - 将Actix Identity与Juniper GraphQL结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63085427/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com