Cookies 无法在NestJS GraphQL中设置cookie
我们有一个NestJS GraphQL服务器正在运行,我们正在尝试在拦截器中设置一个httpOnly cookie。 如果我们在cookies选项卡中显示cookie,则通过邮递员调用变异,该集合似乎可以工作。 但是从操场上调用变异,浏览器中没有cookie的痕迹。 即使访问guard中的Cookies 无法在NestJS GraphQL中设置cookie,cookies,graphql,nestjs,Cookies,Graphql,Nestjs,我们有一个NestJS GraphQL服务器正在运行,我们正在尝试在拦截器中设置一个httpOnly cookie。 如果我们在cookies选项卡中显示cookie,则通过邮递员调用变异,该集合似乎可以工作。 但是从操场上调用变异,浏览器中没有cookie的痕迹。 即使访问guard中的request.cookies属性,也不会产生任何结果。我们做错了什么 服务器基于fastfy,我们正在使用fastfy cookie库设置cookie 截取程序代码为: @Injectable() expor
request.cookies
属性,也不会产生任何结果。我们做错了什么
服务器基于fastfy
,我们正在使用fastfy cookie
库设置cookie
截取程序代码为:
@Injectable()
export class AccessTokenCookieInterceptor implements NestInterceptor {
intercept(context: ExecutionContext, next: CallHandler<AccessTokens>): Observable<any> {
const ctx = GqlExecutionContext.create(context);
const response: FastifyReply = ctx.getContext().response;
return next.handle().pipe(
tap(data => {
response.setCookie('my_cookie', JSON.stringify(data), {
httpOnly: true,
path: '/',
});
}),
);
}
}
我们阅读cookie的警卫:
@Injectable()
export class AccessTokenGuard implements CanActivate {
async canActivate(context: ExecutionContext): Promise<boolean> {
const ctx = GqlExecutionContext.create(context);
const request = ctx.getContext().request;
const cookie = request.cookies['my_cookie'];
const tokens: AccessTokens = JSON.parse(cookie);
request.finxTokens = tokens;
return true;
}
}
@Injectable()
导出类AccessTokenGuard实现CanActivate{
async canActivate(上下文:ExecutionContext):承诺{
const ctx=GqlExecutionContext.create(context);
const request=ctx.getContext().request;
const cookie=request.cookies['my_cookie'];
const tokens:AccessTokens=JSON.parse(cookie);
request.finxTokens=代币;
返回true;
}
}
谢谢你的帮助 1-您需要将
cors
设置添加到GQLModule中
GraphQLModule.forRoot({
...
cors: {
credentials: true,
origin: true
}
})
2-在apollo客户端设置中,告诉网络接口随每个请求一起发送cookie。您只需传递凭证
选项
const httpLink = new HttpLink({ uri: 'graphql', credentials: 'include' });
const httpLink = new HttpLink({ uri: 'graphql', credentials: 'include' });