используя apollo, cookie в заголовке ответа, но не устанавливается - PullRequest
0 голосов
/ 27 октября 2018

Я разрабатываю функцию входа / регистрации пользователя в рамках более крупного проекта и работаю над локальным хостом (сервер apollo и реагирует на интерфейс apollo). Я использую экспресс-сессию для своих сессий.

При отправке моего логина я вижу, что в заголовке ответа есть set-cookie, но он не установлен в Application-> Cookies.

Я пробовал разные браузеры, используя createHttpLink, apollo-boost и используя include & same-origin (используя same-origin).

Я пытался заставить это работать в течение 2 недель, и у меня закончились попытки попробовать, это был мой последний вариант! Я знаю, что это будет что-то действительно тривиальное, но я просто не вижу этого.

Если я использую GraphqL Playground и меняю настройки, чтобы включить учетные данные, я вижу, что там устанавливаются файлы cookie.

Сервер работает на локальном хосте: 8080 / graphql Клиент работает на локальном хосте: 3000

Клиент:

const client = new ApolloClient({
    link: new HttpLink({
        uri: 'http://localhost:8080/graphql',
        credentials: 'same-origin',
    }),
    cache: new InMemoryCache()
});

Корс:

app.use(
    cors({ 
        origin: 'http://localhost:3000',
        credentials: true
    })
);

Экспресс-сессия:

app.use(
    session({
        name: "sess",
        secret: process.env.SESSION_SECRET,
        resave: false,
        saveUninitialized: false,
        cookie: {
            httpOnly: true,
            secure: false,
            maxAge: 1000 * 60 * 60 * 24 * 7,
        },
    })
);

Ответное печенье:

HTTP/1.1 200 OK
X-Powered-By: Express
Access-Control-Allow-Origin: *
Vary: Origin
Access-Control-Allow-Credentials: true
Content-Type: application/json
Content-Length: 69
set-cookie: sess=s%3AAZXnGb5BVc1aAOwH6zBNiT8mB6Ebf75k.in%2BPU1OvxymDPdPIZBf8%2FQzrRmM0S04tXFzXDwYCnk8; Path=/; Expires=Sat, 03 Nov 2018 13:59:57 GMT; HttpOnly
Date: Sat, 27 Oct 2018 13:59:57 GMT
Connection: keep-alive

Ответы [ 3 ]

0 голосов
/ 05 ноября 2018

Мне удалось решить эту проблему, передав параметры CORS непосредственно в applyMiddleware.

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

Я попытался исправить это с помощью экспресс.Но это не сработало с Apollo GraphQL.

const corsOptions = {
    origin: "http://localhost:3000",
    credentials: true
  };
app.use(cors(corsOptions));

Итак, я попытался настроить cors на сервере GraphQL и все заработало.

Для сервера Apollo

const corsOptions = {
    origin: "http://localhost:3000",
    credentials: true
  };

const server = new ApolloServer({
  typeDefs,
  resolvers,
  cors: corsOptions
});

server.listen().then(({ url }) => {
  console.log(`? Server ready at ${url}`);
});

Для GraphQL Йога

const options = {
  cors: corsOptions
};

server.start(options, () =>
  console.log("Server is running on http://localhost:4000")
);
0 голосов
/ 29 октября 2018

Кажется, проблема в конфигурации CORS.Сначала измените HttpLink на credentials: 'include';затем попробуйте следующее промежуточное программное обеспечение CORS:

app.use(
  cors({ 
    origin: 'http://localhost:3000',
    credentials: true,
    allowedHeaders: ['Content-Type', 'Authorization'],
  })
);

Если вы все еще получаете сообщение об ошибке The value of the 'Access-Control-Allow-Origin' header in the response must not be the wildcard '*' when the request's credentials mode is 'include'., то это говорит о том, что промежуточное программное обеспечение CORS неправильно устанавливает Access-Control-Allow-Origin: http://localhost:3000 (ваш пример показывает, что возвращается *, но яЯ не уверен, что это была проблема копирования / вставки, так как документы cors показывают, что это должно работать.)

...