Последние пару дней я выдергивала волосы. Независимо от того, сколько поисковых запросов в Google я выполняю, я не могу найти ответ, поэтому прихожу сюда в крайнем случае в надежде на некоторую помощь.
Я создаю приложение с полным стеком в стеке MEAN. Мой логин работает. Он проверяет, совпадают ли адрес электронной почты и пароль с адресом электронной почты и паролем пользователя в моей базе данных. Теперь я хочу отправить токен JWT своему клиенту, чтобы я мог оставить пользователя в гостинице. Я понимаю, как работает JWT, и я уже создал его
const ACCESS_TOKEN_SECRET = "a random string";
const payload = {"username": login_result[0].username};
const accessToken = jwt.sign(payload, ACCESS_TOKEN_SECRET);
Здесь начинаются мои проблемы. Я хочу сохранить токен в cook ie, чтобы предотвратить атаки XSS. Я перепробовал всевозможные способы сохранить JWT в cook ie. Большинство форумов писали, что я должен сделать
res.cookie('access_token', accessToken);
Насколько я понимаю, это должно автоматически сохранить JWT в cook ie на моем клиенте под именем «access_token». Однако это не работает. Когда эта строка находится в коде, ничего не происходит. Под «ничего не происходит» я имею в виду, что код клиента не выполняется.
Если пароль / адрес электронной почты недействителен, я возвращаю код ошибки.
if(res.msg == "403"){
this.showLogErrorMsg = true;
}
Эта часть работает.
Оператор else выглядит следующим образом else {console.log («Действительное имя пользователя и пароль»);
window.location.href = "http://localhost:4200/profile";
}
Это означает, что если вход в систему неправильный, он напечатает ошибку (и это так), если вход в систему правильный, предполагается, что они будут перенаправлены. Это не работает. Он работал, когда я делал
ret.json({"access_token":accessToken});
, но не работал с
res.cookie('access_token', accessToken);
Это то, чего я не понимаю. Он не хранит access_token в файлах cookie и не выполняет код внутри оператора else. На моем сервере или клиенте нет сообщений об ошибках. Более того, в каждом руководстве или учебнике говорится об использовании res.cook ie, поскольку я использую Express в качестве своего веб-сервера. Я даже попытался добавить следующие параметры:
res.cookie('access_token', accessToken,{domain: domain, path: '/',httpOnly:false,
secure:false,sameSite:false});
Решение состоит в том, чтобы каким-то образом заставить работать res.cookies, что я действительно хочу сделать, потому что это «то, что используют все остальные» и это кажется действительно холодным. Или отправьте токен JWT как res. json, а затем сохраните токен в cook ie в angular. Однако открывает ли это вам возможность использовать XSS? А если нет, то как мне сохранить что-нибудь повару ie в angular?
Заранее спасибо, ребята.