Задать вопрос
@zitSuccess

Почему при запросе на сервер сбрасываются сессии?

Есть код на nest, который добавляет товары корзины в сессию. При отправке запроса с postman, сессия сохраняется и корзина обновляется(убирается товар, добавляется новы и т.д.). При отправке запроса с клиента react, через axios, сессия не сохраняется, и каждый раз приходин новый экземпляр корзины. Гуглю уже день, так и не смог решить проблему. Есть предположение, что проблема на стороне клиента. Код:

main.ts(nest)
async function bootstrap() {
    const app = await NestFactory.create(AppModule);
    app.enableCors({
        origin: 'http://localhost:3000',
        credentials: true,
    })
    app.use(session({
            secret: SESSION_SECRET,
            resave: false,
            saveUninitialized: true,
            cookie: {secure: false, maxAge: 360000, sameSite: 'strict'},
        })
    )
    app.setGlobalPrefix('api')
    await app.listen(8000);
}


Добавление товара в корзину:
@Post()
    async addToCart(@Body() body: AddToCartDto, @Session() session: Record<string, any>, @Res() res: Response) {
        const {productId, quantity} = body
        const cart = session.cart || {items: [], totalPrice: 0}
        // console.log(cart)
        console.log(session)

        const existingItem = cart.items.find((item) => item.id === productId);
        if (existingItem) {
            existingItem.quantity += quantity;
        } else {
            const product = await this.productsService.findOne(productId)
            const newItem = { id: productId, title: product.title, quantity, price: product.priceUAN };
            cart.items.push(newItem);
        }
        cart.totalPrice = cart.items.reduce((total, item) => total + item.price * item.quantity, 0);
        session.cart = cart
        res.json({cart})
    }


Код добавления товара на стороне клиента:
export const addToCart = (productId: number, quantity: number): ThunkType => async dispatch => {
    try {
        const data = {productId, quantity}
        const config = {
            headers: {'SameSite': "Strict"},
            withCredentials: true
        }
        const response = await axios.post(`${process.env.REACT_APP_API_URL}/cart`, data, config)
        console.log(response)
        dispatch({type: SET_CART_SUCCESS, cart: response.data.cart})
    } catch (e) {
        console.log(e)
    }
}
  • Вопрос задан
  • 114 просмотров
Подписаться 1 Средний 3 комментария
Решения вопроса 1
Mike_Ro
@Mike_Ro
Python, JS, WordPress, SEO, Bots, Adversting
app.use(
  session({
    secret: SESSION_SECRET,
    resave: false,
    saveUninitialized: true,
    cookie: {
      secure: false,
      maxAge: 360000,
      sameSite: 'strict',
      domain: 'localhost', // добавил домен
    },
  }),
);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы