#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 сохраняется должным образом.