Node.js, Angular, express -сессия: Chrome 80 не сохраняет сеанс из-за политики повара ie (файлы cookie sameSite) - PullRequest
0 голосов
/ 04 апреля 2020

У меня есть приложение Node.js, Angular. (Node.js сервер написан на TypeScript). Node.js Сервер работает на экземпляре Amazon E C -2, клиент Angular находится на другом сервере.

Для сеанса входа в систему я использую express -сессион. Я не использую файлы cookie в приложении, поэтому я думаю, что проблема связана с файлами cookie express. На Firefox он работает правильно, но с Google Chrome (80.0.3987.149) он не работает: Chrome не сохраняет сеанс (поэтому я не могу покинуть страницу входа) и предупреждает:

Повар ie, связанный с межсайтовым ресурсом на http://addressof.myserverapp.com/ был установлен без атрибута SameSite. Он был заблокирован, поскольку Chrome теперь доставляет файлы cookie только с межсайтовыми запросами, если они установлены с SameSite=None и Secure. Вы можете просмотреть файлы cookie в инструментах разработчика в разделе «Приложения»> «Хранение»> «Файлы cookie» и получить более подробную информацию по адресу https://www.chromestatus.com/feature/5088147346030592 и https://www.chromestatus.com/feature/5633521622188032.

In Node.js сервер Я установил express -сессии следующим образом:

import cookieParser from 'cookie-parser';
app.use(cookieParser(secret));

app.use(session({
    secret: secret,
    resave: false,
    saveUninitialized: false,
    cookie: {
        httpOnly: false,
        maxAge: null,
        secure: true,
        sameSite: 'none'
    },
    store: sessionStore // MySqlStore - express-mysql-session
}));

Я также пытался решить проблему с помощью этого фрагмента кода (из https://github.com/expressjs/session/issues/725#issuecomment -605922223 )

Object.defineProperty(session.Cookie.prototype, 'sameSite', {
    // sameSite cannot be set to `None` if cookie is not marked secure
    get() {
        return this._sameSite === 'none' && !this.secure ? 'lax' : this._sameSite;
    },
    set(value) {
        this._sameSite = value;
    }
});

Сервер npm пакеты:

"cors": "^2.8.5",
"cookie-parser": "^1.4.5",
"express": "^4.17.1",
"express-mysql-session": "^2.1.3",
"express-session": "^1.17.0",
Npm version: 6.13.4
Node version: 12.16.1

Я потратил несколько дней на эту проблему, чтобы понять, что я делаю не так ...

...