如何使用graphql codegen处理X-Hasura-Role

如何使用graphql codegen处理X-Hasura-Role,graphql,apollo,roles,hasura,codegen,Graphql,Apollo,Roles,Hasura,Codegen,早上好 我有一个Angular WebApp,它使用GraphQL codegen(apollo Angular插件和所有typescript插件)。一切都很好,但我想处理Hasura角色和Hasura用户ID。从Hasura控制台,一切都配置正确并正常工作 我唯一缺少的是如何在前端处理这个问题。我需要将X-Hasura-Role和X-Hasura-User-Id头添加到发送给Hasura的每个请求中。 有没有办法用graphql codegen做到这一点? 正确的方法是什么 我知道我可以在co

早上好

我有一个Angular WebApp,它使用GraphQL codegen(apollo Angular插件和所有typescript插件)。一切都很好,但我想处理Hasura角色和Hasura用户ID。从Hasura控制台,一切都配置正确并正常工作

我唯一缺少的是如何在前端处理这个问题。我需要将
X-Hasura-Role
X-Hasura-User-Id
头添加到发送给Hasura的每个请求中。 有没有办法用graphql codegen做到这一点? 正确的方法是什么

我知道我可以在
codegen.yml
上添加
标题
部分,但很明显,角色和用户ID是动态的,因此我无法在那里硬编码任何内容

我是否应该使用
customFetch
组件?这个组件应该只截获发送给Hasura的每个请求,并添加所需的头。我不知道怎么做,所以我希望你能帮助我(我也希望有更好的解决方案)


致以最诚挚的问候

在Angular应用程序中创建Apollo客户端实例时,您可以将其设置为传递授权标头,该标头应包含用户id及其角色

在本手册中有这样的例子。例如:

从'@angular/core'导入{NgModule};
从'@angular/common/http'导入{HttpClientModule};
从“阿波罗角”导入{Apollo,Apollo_选项};
从'apollo angular/http'导入{HttpLink};
从'@apollo/client/core'导入{InMemoryCache,ApolloLink};
从'@apollo/client/link/context'导入{setContext};
常量uri='/graphql';
导出函数createApollo(httpLink:httpLink){
const basic=setContext((操作,上下文)=>({
标题:{
接受:“字符集=utf-8”
}
}));
const auth=setContext((操作,上下文)=>{
const token=localStorage.getItem('token');
如果(令牌===null){
返回{};
}否则{
返回{
标题:{
授权:`JWT${token}`
}
};
}
});
const link=ApolloLink.from([basic,auth,httpLink.create({uri})];
常量缓存=新的InMemoryCache();
返回{
链接
隐藏物
}
}
@NGD模块({
出口:[
HttpClientModule,
],
供应商:[{
提供:APOLLO_选项,
useFactory:createApollo,
副部长:[HttpLink]
}]
})
导出类GraphQLModule{}
由您来确保将随您的请求一起传递的JWT令牌在前端可用。最终,您必须实现某种身份验证方法,以允许用户登录并将令牌传递给前端应用程序

更多信息可在


还有许多方法可用于与不同的第三方身份验证提供商集成

谢谢,这将非常有用!我会尽快试一试,看看效果如何。“我对这一切都是新手,所以我希望我不会发现任何严重的并发症,”GiammarcoBoscaro说,“没问题。如果这对社区其他人有帮助,请随意投票或将其标记为答案当然!答案是有帮助的,即使我仍然有一些问题。不是你的问题,而是星云的问题。当我得到响应时,我需要保存令牌,因此当我创建Apollo客户端时,我已经准备好了角色和用户ID。不幸的是,当登录在Nebular中完成时,我似乎无法添加自定义函数作为回调函数,因此我无法在Apollo客户端初始化之前保存这些标头,因此显然标头是未定义的。仍在试图找到一种方法让它发挥作用。