Пользовательский файл cookie отправляется в браузер, но не сохраняется - PullRequest
0 голосов
/ 20 октября 2019

Я попробовал несколько конфигураций и прочитал несколько сообщений об этой проблеме, но я все еще потерян.

Пользовательский файл cookie, отправленный моим сервером api, принимается браузером, но никогда не сохраняется. И я не могу понять, почему.

Я разработал api-сервер node / express, развернутый на heroku.

Мой интерфейс использует Vuejs и развернут на firebase.

Вот код, связанный с моей конфигурацией cookie:

СТОРОНА

Cors

app.use(
    cors({
        origin: 'https://my-app.firebaseapp.com',
        credentials: true,
    exposedHeaders: ['customCookie']
    })
);

Set-cookie

const cookieOptions = {
    httpOnly: true,
    sameSite: 'None',
    expires: expirationDate,
    secure: true,
    path: '/',
    domain: 'https://my-app.firebaseapp.com',
};

res.cookie('customCookie', 'value', cookieOptions)

CLIENT-СТОРОНА

Axios

axios.defaults.baseURL = 'https://my-app.herokuapp.com';
axios.defaults.withCredentials = true;

ЗАПРОСИТЕ ЗАГОЛОВОК

POST /auth/sign-in HTTP/1.1
Host: my-app.herokuapp.com
Connection: keep-alive
Content-Length: 55
Pragma: no-cache
Cache-Control: no-cache
Origin: https://my-app.firebaseapp.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3921.0 Safari/537.36
Content-Type: application/json;charset=UTF-8
Accept: */*
Sec-Fetch-Site: cross-site
Sec-Fetch-Mode: cors
Referer: https://my-app.firebaseapp.com/auth/sign-in
Accept-Encoding: gzip, deflate, br
Accept-Language: fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7,nl;q=0.6,la;q=0.5

ОТВЕТИТЬ ЗАГОЛОВОК

HTTP/1.1 200 OK
Server: Cowboy
Connection: keep-alive
X-Dns-Prefetch-Control: off
X-Frame-Options: SAMEORIGIN
Strict-Transport-Security: max-age=15552000; includeSubDomains
X-Download-Options: noopen
X-Content-Type-Options: nosniff
X-Xss-Protection: 1; mode=block
Access-Control-Allow-Origin: https://my-app.firebaseapp.com
Vary: Origin, Accept-Encoding
Access-Control-Allow-Credentials: true
Access-Control-Expose-Headers: customCookie
Set-Cookie: customCookie=value; Domain=https://my-app.firebaseapp.com; Path=/; Expires=Sun, 17 Nov 2019 11:54:30 GMT; HttpOnly; Secure; SameSite=None
Content-Type: application/json; charset=utf-8
Content-Length: 200
Etag: W/"c8-qlzfwyZ+uJQMQIeJOQnFSQYPR6o"
Date: Sun, 20 Oct 2019 11:54:30 GMT
Via: 1.1 vegur

Итак, файл cookie правильно отправляется и получает здесь:

Set-Cookie: customCookie=value; Domain=https://my-app.firebaseapp.com; Path=/; Expires=Sun, 17 Nov 2019 11:54:30 GMT; HttpOnly; Secure; SameSite=None

Но когда я проверяю вкладку: Google Dev Tools >> Приложение >> Cookies >> my-app ...

=> Там нет ни одного сохраненного файла cookie и, следовательно, файла cookieне отправляется на последующий запрос ...

Есть идеи / советы?

Большое спасибо за помощь,

Romain

Ответы [ 2 ]

0 голосов
/ 21 октября 2019

Я думаю, что понял.

В Chrome (и, возможно, другом навигаторе) файлы cookie, похоже, хранятся только в доменном адресе, и адрес домена, в моем случае, должен быть приложением сервера (мой-app.herokuapp.com), а не клиент (my-app.firebaseapp.com).

Другими словами, я думал, что мой файл cookie будет сохранен и виден в адресе моего клиентского приложения, но онифактически хранится и отображается на моем доменном адресе.

Теперь все работает ...

0 голосов
/ 20 октября 2019

Я думаю, вам нужно обработать Access-Control.

, вы можете сделать это, добавив этот код

app.use(function(req, res, next) {
    res.header('Access-Control-Allow-Credentials', true);
    res.header('Access-Control-Allow-Origin', req.headers.origin);
    res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
    res.header('Access-Control-Allow-Headers', 'X-Requested-With, X-HTTP-Method-Override, Content-Type, Accept');
    next();
});

Кроме того, я полагаю, что вы используете Chrome в качестве браузера, можетеВы запускаете Chrome без защиты, выполняя это, а затем проверяете, сохранены ли ваши куки-файлы

"C: \ Program Files (x86) \ Google \ Chrome \ Application \ chrome.exe" --user-data-dir = "C: / Chrome dev session" --args --disable-web-security

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...