Node.js express не может установить файлы cookie на Heroku

#node.js #express #heroku #cookies

#node.js #экспресс #heroku #файлы cookie

Вопрос:

Кажется, не могу понять это. У меня есть клиент, использующий create-react-app, который отправляет запрос на сервер в express / graphql и устанавливает файлы cookie локально для токена JWT, но я не могу установить файлы cookie на heroku.

Кто-нибудь знает, как я могу сохранить файлы cookie?

 import dotenv from 'dotenv';
dotenv.config();

import express, { response } from 'express';
import { graphqlHTTP } from 'express-graphql';
import cookieParser from 'cookie-parser';
import Access from './entity/access';
import cors from 'cors';

import { schema, root } from './api/schema';
import { createConnection } from 'typeorm'; 

createConnection()
  .then(async (connection) => {
    await Access.load();
    const app = express();
    const corsOptions = {
      origin: process.env.CORS_ORIGIN!,
      credentials: true,
      optionsSuccessStatus: 200
    };

    app.set('trust proxy', 1);
    app.use(cors(corsOptions));
    app.use(express.json());
    app.use(cookieParser());

    app.use(
      process.env.GRAPHQL_PATH!,
      graphqlHTTP((request, response, graphQLParams) => ({
        schema: schema,
        rootValue: root,
        graphiql: true,
        context: {
          req: request,
          res: response,
        },
      }))
    );

    app.listen(parseInt(process.env.PORT! || process.env.APP_PORT!));
    console.log(
      `Server started`
    );
  })
  .catch((err) => {
    console.log(err);
  });
 
 export function setRefreshTokenCookie(res: Response, token: string) {
  const refreshExpiration = Access.refreshExpiration();

  res.cookie(process.env.REFRESH_TOKEN_NAME!, token, {
    domain: process.env.REFRESH_TOKEN_DOMAIN!,
    secure: process.env.REFRESH_TOKEN_SECURE! == "true",
    httpOnly: process.env.REFRESH_TOKEN_HTTPONLY! == "true",
    expires: refreshExpiration,
    maxAge: refreshExpiration.getTime(), 
  });
}
 

Ответ №1:

Выяснил, что проблемы были связаны с тем, что api и клиент находились в разных доменах. Я переключил api на api.domain.com и поставьте клиента на domain.com теперь файл cookie сохраняется должным образом.