NodeJS, VueJS, экспресс-сессия. Файлы cookie не устанавливаются на стороне клиента

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

I. Вкратце.

Настройки приложения:

Сервер: NodeJS Порт: 8081

Клиент: VueJS Порт: 8088

Я использую модуль «экспресс-сеанс» для инициализации механизма сеанса на стороне сервера и отправки файлов cookie клиенту. Клиент не установил файлы cookie.

II. Подробности:

Корневой файл сервера - index.js.

В нем я делаю следующее:

Подключите express модуль:

const express = require('express')
  1. Подключите cors модуль:
const cors = require('cors')
  1. Добавьте cors настроек:
app.use(cors({
    origin: 'http://localhost:8088',
    credentials: true
}))

Затем я инициализирую сеанс в файле user.js и получаю подключения клиента: Подключите express-session модуль:

const session = require('express-session')
  1. Подключите маршрутизацию с помощью express.Router ():
const router = express.Router()
  1. Добавить настройки сеанса:
const EIGHT_HOURS  = 1000 * 60 * 60 * 2
const {
    SESS_NAME = 'sid',
    SESS_LIFETIME = EIGHT_HOURS,
    SESS_SECRET = 'test',
    NODE_ENV = 'development'
} = process.env
const IN_PROD = NODE_ENV === 'production'
  1. Инициализировать сеанс:
router.use(session({
    name: SESS_NAME,
    resave: false,
    saveUninitialized: false,
    secret: SESS_SECRET,
    cookie: {
        maxAge: SESS_LIFETIME,
        sameSite: false,
        // Must have HTTPS to work 'secret:true'
        secure: IN_PROD
    }
}))
  1. Получать запросы клиентов до router.post()

Клиентская часть приложения состоит из множества файлов. Клиент отправляет данные на сервер NodeJS с помощью модуля Axios.

Я прочитал несколько статей по этой теме и полагаю, что сделанные мной настройки на стороне сервера вполне достаточны для работы механизма сессионных файлов cookie. Это означает, что проблема находится на стороне Vue.

Что я сделал:

  1. Я установил во всех файлах, где Axios отправляет данные на сервер, параметр withCredentials в истинном значении (withCredentials: true), чтобы передать ограничения CORS. Это не помогло

  2. В производственном приложении есть другие URL-адреса для доступа к производственному серверу NodeJS. Я установил URL-адрес сервера NodeJS во всех файлах на стороне клиента. Это не помогло

  3. Прочтите эту статью: форум Vue. Из этой статьи я понял, что эту проблему нужно решить с помощью axios.interceptors (Форум StackOverFlow). Я предположил, что если этот параметр установлен на одной из сторонних страниц клиента, возможно, файлы cookie должны работать хотя бы на этой странице. Это не помогло. Пытался установить такую ​​настройку:

axios.defaults.withCredentials = true

И это:

axios.interceptors.request.use( function (config) {
                console.log('Main interceptor success')
                config.withCredentials = true;
                return config;
            },
                function(error) {
                    // Do something with request error
                    console.log('Main interceptor error')
                    return Promise.reject(error);
                }
            )

Это не помогло

Подскажите, пожалуйста, в каком направлении мне двигаться? Верно ли, что на стороне клиента абсолютно на всех страницах должна быть axios.defaults.withCredentials = true настройка для инициализации механизма файлов cookie? Какие детали я упускаю? Если я устанавливаю файлы cookie сеанса с нуля, механизм работает.


person Gleb Tregubov    schedule 18.09.2019    source источник
comment
Как вы определяете, что файл cookie не установлен? Вы проверили запрос на вкладке «Сеть», чтобы установить, что именно отправляется в каждую сторону, и подтвердили ли это правильность?   -  person skirtle    schedule 18.09.2019
comment
Да, конечно, я проверяю вкладку «Сеть» в Chrome. Нет информации о сеансе сервера или файлах cookie, но сеанс работает на сервере. Я ищу данные файлов cookie на вкладке «Приложение» в инструментах разработчика Chrome. Нет инфы.   -  person Gleb Tregubov    schedule 18.09.2019
comment
Глеб, продвинулись ли вы в этом вопросе? У меня точно такая же ошибка   -  person Tichel    schedule 14.01.2021
comment
@Tichel, да, решаю вопрос. Мне нужно найти хранилище файлов cookie в другом месте браузера: Хранилище файлов cookie сервера Chrome Chrome настройки на картинке выше на русском языке, для английского вам нужно выбрать Cookie settings.   -  person Gleb Tregubov    schedule 12.04.2021


Ответы (1)


Решаю этот вопрос. Мне нужно найти хранилище файлов cookie в другом месте браузера:

Хранилище файлов cookie сервера Chrome

person Gleb Tregubov    schedule 09.10.2019