Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/466.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在nestjs graphql中实现用户保护_Javascript_Graphql_Jwt_Nestjs_Graphql Js - Fatal编程技术网

Javascript 如何在nestjs graphql中实现用户保护

Javascript 如何在nestjs graphql中实现用户保护,javascript,graphql,jwt,nestjs,graphql-js,Javascript,Graphql,Jwt,Nestjs,Graphql Js,我试图获取当前用户,但在解析器中未定义,在jwt策略中,我使用tokne获取用户ibject,但在解析器中未定义用户 授权守卫 用户装饰 应用程序模块 分解器 从“src/types/User”导入{User}; 从“./guards/graphql.auth.guard”导入{GqlAuthGuard}”; @分解器() 导出类OrdersResolver{ 建造师( 专用orderService:OrdersService ) { } @查询(返回=>[订单]) @UseGuards(Gql

我试图获取当前用户,但在解析器中未定义,在jwt策略中,我使用tokne获取用户ibject,但在解析器中未定义用户

授权守卫

用户装饰

应用程序模块

分解器

从“src/types/User”导入{User};
从“./guards/graphql.auth.guard”导入{GqlAuthGuard}”;
@分解器()
导出类OrdersResolver{
建造师(
专用orderService:OrdersService
) {
}
@查询(返回=>[订单])
@UseGuards(GqlAuthGuard)
listOrders(@CurrentUser()用户:用户):承诺{
console.log(用户)
返回此.orderService.listOrdersByUser(user.id);
}
}

我还尝试实现这里解释的解决方案,但在Nest v7中仍然出现了相同的错误,
createParamDecorator
函数得到了更新。现在,不用

export const CurrentUser=createParamDecorator(
(数据,请求)=>req.user)
;
您应该改为使用以下内容:

export const User=createParamDecorator(
(数据:未知,ctx:ExecutionContext)=>{
const gqlCtx=GqlExecutionContext.create(ctx);
const request=gqlCtx.getContext().req;
返回请求.user;
},
);
为了让它发挥作用,您还需要

context: ({req}) => ({req})

在您的
GraphqlModule
配置中。

快速提问:您的嵌套版本是什么?v6和v7之间的
createParamDecorator
函数发生了更改。这些是nestjs版本“@nestjs/common”:“^7.0.0”、“@nestjs/core”:“^7.0.0”、“@nestjs/graphql”:“^7.3.4”、“@nestjs/jwt”:“^7.0.0.0”、“@nestjs/mongoose”:“^6.4.0.0”、“@nestjs/passport”:“^7.0.0.0”、@nestjs/platform express“,“@nestjs/swagger”:“^4.5.1”,
import {createParamDecorator} from '@nestjs/common';

export const CurrentUser = createParamDecorator(
    (data, req) =>  req.user )
;
@Module({
  imports: [
      PassportModule.register({ defaultStrategy: 'jwt' }),
      JwtModule.register({
          signOptions: {
              expiresIn: 3600,
          },
      }),
      SharedModule,
      AuthModule,
      GraphQLModule.forRoot({
          autoSchemaFile: 'schema.gql',
          context: ({ req }) => ({ req })
      }),
      MongooseModule.forRoot(process.env.MONGO_URI,
        {
          useNewUrlParser: true ,
          useUnifiedTopology: true
        }),
    // RewardsModule,
    OrdersModule,
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}
import {User} from "src/types/user";
import {GqlAuthGuard} from "../guards/graphql.auth.guard";

@Resolver()
export class OrdersResolver {
    constructor(
        private orderService: OrdersService
    ) {
    }

    @Query(returns => [Order])
    @UseGuards(GqlAuthGuard)
    listOrders(@CurrentUser() user: User): Promise<Order> {
        console.log(user)
        return this.orderService.listOrdersByUser(user.id);
    }

}
context: ({req}) => ({req})