Идентификатор экспресс-сеанса не сохраняется в cookie (graphql)

Я не могу за всю жизнь этой программы понять, почему этот файл cookie не сохраняется в браузере. Если я запустил игровую площадку graphql (которая находится на порту 4000, так же, как и сервер), идентификатор сеанса будет сохранен в браузере без проблем. У меня включен корсинг, так что это не должно блокировать это. Но если я отправлю запрос на вход с любого другого URL-адреса, он не сохранит его в браузере. Я пробовал несколько браузеров, и ни на одном из них это не сэкономит, и я пробовал регистрировать сеансы, чтобы убедиться, что я действительно их сохраняю. Любые идеи?

const { GraphQLServer } = require('graphql-yoga');
const session = require('express-session');
const bcrypt = require('bcryptjs');
const ms = require('ms');


const typeDefs = `
  type Query {
    isLoggedIn: Boolean!
  }
  type Mutation {
    logIn(email: String!, password: String!): Boolean!
    signUp(email: String!, password: String!): Boolean!
  }
`

// mock mockDBbase
const mockDB = {};

const resolvers = {

  Query: {
    // is the user authenticated
    isLoggedIn: (parent, args, ctx) => {
      return ctx.session.isLoggedIn === true;
    }
  },

  Mutation: {

    // user can sign up for a new account
    signUp: async (parent, { email, password }, ctx) => {
      // if user is already in the DB
      if (mockDB[email]) {
        throw new Error('This user already exists, please log in.');
      }
      const saltRounds = 14; // roughly 1.5 secs on 2GHZ CPU
      // store password in mock DB (replace with real DB)
      mockDB[email] = {
        // salt and hash pw
        password: await bcrypt.hashSync(password, saltRounds),
      };
      return true;
    },

    // authenticates user into respective account
    logIn: async (parent, { email, password }, ctx) => {
      // grab user from DB
      const user = mockDB[email];
      if (user) {
        // make sure pw matches
        if (await bcrypt.compareSync(password, user.password)) {
          // set user logged in flag
          ctx.session.isLoggedIn = true;
          return true;
        }
        throw new Error('User email or password is incorrect.');
      }
      throw new Error('User email or password is incorrect.');
    }
  }
}

// opts
const opts = {
  port: 4000,
  cors: {
    credentials: true,
    origin: "*"
  }
};

// context
const context = req => ({
  session: req.request.session,
});

// server
const server = new GraphQLServer({
  typeDefs,
  resolvers,
  context,
});

const SESSION_SECRET = 'my-super-secret-secret';

server.express.set('trust proxy', 1) // trust first proxy

// session middleware 
server.express.use(
  session({
    name: 'SSID',
    // change this to randomly generate a secret
    secret: SESSION_SECRET,
    resave: false,
    saveUninitialized: true,
    cookie: {
      httpOnly: true,
      secure: process.env.NODE_ENV === 'production',
      sameSite: process.env.NODE_ENV === 'production',
      maxAge: ms('1d'),
    }
  })
);

// start server
server.start(opts, () => console.info(`Server is running on http://localhost:${opts.port}`));

Итак, когда вы входите в систему, вы имеете в виду вход через мутацию graphql или вход через вход в сеанс в экспрессе? В любом случае, не могли бы вы опубликовать свой сетевой запрос и ответ? Я догадываюсь, в чем проблема.

Austio 19.09.2018 05:16

Так что я только что выяснил, в чем проблема. Проблема с площадкой Graphql все еще не решена. Даже если вы установите учетные данные для отправки с вашим запросом, они не будут отправляться вместе с вашим запросом. Он все равно попадет в api, но cookie не будет установлен. github.com/prisma/graphql-playground/issues/748

BenBrewerBowman 19.09.2018 05:43
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
2
539
0

Другие вопросы по теме