Как я могу установить ключ сеанса из решателя GraphQL в NestJS? - PullRequest
1 голос
/ 29 апреля 2019

Я открываю для себя Nest.js и хочу установить систему аутентификации на основе файлов cookie с помощью GraphQL.

Я уже установил промежуточное программное обеспечение Express-сеанса, вот конфигурация:

main.ts

 app.use(
    session({
      store: new redisStore({
        client: redis
      } as any),
      name: 'qid',
      secret: SESSION_SECRET,
      resave: false,
      saveUninitialized: false,
      cookie: {
        httpOnly: true,
        secure: !isDev,
        maxAge: 1000 * 60 * 60 * 24 * 7 * 365
      }
    })
  )

работает нормально, потому что когда я делаю:

 app.use((req: any, res: any, next: any) => {
      // Debug purpose
      req.session.userId = '42'
      next()
    })

Файл cookie добавлен.

Прямо сейчас у меня есть две мутации: регистрация и логин . В мутации входа в систему (или в userService) после того, как я нашел пользователя, я хочу сделать что-то вроде req.session.userId = user.id, но я не могу найти способ сделать это.

Я пытался добавить @Context() ctx к своей мутации. Если я консоль журнала ctx, он содержит все, что я ожидаю (например, req.session.id)

Но если я сделаю ctx.req.session.userId = 'something', файл cookie не будет установлен!

Вот моя мутация:

user.resolver.ts

@Mutation('login')
  async login(
    @Args('email') email: string,
    @Args('password') password: string,
    @Context() ctx: any
  ) {
    console.log(ctx.req.session.id) // Show the actual session id
    ctx.req.session.userId = 'something' // Do not set any cookie
    return await this.userService.login(email, password)
  }
}

Я полностью потерян и мне действительно нужна помощь, я бы хотел понять, что происходит. Я знаю, что, возможно, я делаю это совершенно неправильно, но я новичок в Nest и GraphQL ..

Спасибо, ребята ...

1 Ответ

0 голосов
/ 08 мая 2019

Я нашел проблему через много дней ... и это было ...

GraphQL Playground -> Настройки -> добавить «request.credentials»: «включить» (и не «пропустить»)

Надеюсь, это кому-нибудь поможет ..

...