Cookies 无法在NestJS GraphQL中设置cookie

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

我们有一个NestJS GraphQL服务器正在运行,我们正在尝试在拦截器中设置一个httpOnly cookie。 如果我们在cookies选项卡中显示cookie,则通过邮递员调用变异,该集合似乎可以工作。 但是从操场上调用变异,浏览器中没有cookie的痕迹。 即使访问guard中的
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' });