我正在构建一个带锈蚀和翘曲的graphql。我已经查看了这些文档,但我仍然没有弄清楚如何链接过滤器,特别是检查请求头中的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设置了一个路由.and(warp::header::<String>("authorization"),然后它拒绝所有在头中不包含authorization的请求。
我怎么才能
authorization,那么返回带有适当user_id的ContextContext的user_id: 0发布于 2019-03-05 02:04:09
我在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(),
);https://stackoverflow.com/questions/54988438
复制相似问题