У меня есть приложение nodejs / express + React CRA, и я пытаюсь установить cookie-файл из nodejs.Сервер находится на порте 4001, поэтому в моем проекте project Rejj.json у меня установлено "proxy": "http://localhost:4001"
, но cookie все равно не будет установлен в браузере.
Я тестировал его в производственном режиме, какхорошо, с приложением React, обслуживаемым напрямую от nodejs, и там все прекрасно работает.
Вот как я устанавливаю cookie.Я попробовал несколько различных комбинаций опций здесь, и все они имеют одинаковый результат.
res.cookie('jwt', token, {
httpOnly: false,
sameSite: false,
signed: false,
secure: false,
encode: String
});
res.header('Access-Control-Allow-Credentials', 'true');
Редактировать: На стороне клиента я использую Axios для своих запросов ajax.
Редактировать:
Вот функция конечной точки для входа (POST / api / users / login):
login: function(req, res) {
User.findOne({
$or: [{email: req.body.username}, {username: req.body.username}]
}).exec().then(user => {
if(user) {
if(user.checkPassword(req.body.password)) {
jwt.sign({ userID: user._id }, 'secret', (err, token) => {
res.cookie('jwt', token, {
httpOnly: false,
sameSite: false,
signed: false,
secure: false,
encode: String
});
res.header('Access-Control-Allow-Credentials', 'true');
res.status(200).send({ status: 'ok', message: 'Success'});
});
}
else {
return res.status(401).send({ status: 'error', message: 'Invalid username/password combination. Please try again.' });
}
}
else {
return res.status(401).send({ status: 'error', message: 'Invalid username/password combination. Please try again.' });
}
}, err => {
return res.status(500).send({ status: 'error', message: 'unexpected error' });
});
}
Вот код входа на стороне клиента:
login(username, password) {
return new Promise((resolve, reject) => {
axios({
method: 'post',
url: 'http://localhost:4001/api/users/login',
data: {
username,
password
}
}).then((res) => {
resolve(res.data);
}, (err) => {
reject(err);
});
});
}
Сервер находится на порту 4001, сервер React CRA на 3000