#javascript
#javascript
Вопрос:
Мне нужна некоторая помощь. Мое приложение написано на node, express ejs. У меня есть функция в отдельном файле javascript, которая удаляет cookies, если нажата ссылка для выхода из системы. Однако она работает только для нескольких страниц, а для остальных — нет. При нажатии кнопки выхода из системы пользователь должен быть перенаправлен на страницу индекса, а все файлы cookie из браузера и базы данных должны быть удалены. Часть базы данных работает нормально, перенаправление тоже, но ссылки не удаляются, если пользователь выходит из системы с определенных страниц. Я заметил, что эта функция работает только для страниц, где маршрут выглядит как «/», и не работает, если это «/: something», хотя я не знаю, имеет ли это смысл или нет. Вот мой frontend.js файл:
window.onload=function(){
frontFunc.displayButtons();
frontFunc.deleteCookie();
}
const frontFunc = (function(){
function displayButtons(){
if (!document.cookie.split(';').filter((item) => item.includes('logedIn=')).length){ //returns 0 if no login => false, therefore we need "!"
let a = document.getElementsByClassName('account');
for (let i = 0 ; i<a.length; i ){
a[i].style.display='none';
}
// a[0].style.display='none';
let b= document.getElementsByClassName('score');
for (let i = 0 ; i<b.length; i ){
b[i].style.display='none';
}
// b[0].style.display='none';
}
else{
let a= document.getElementsByClassName('signIn');
for (let i = 0 ; i<a.length; i ){
a[i].style.display='none';
}
}
}
function deleteCookie(){
let a =document.getElementsByClassName('logOut');
console.log("this is logout" a)
for (let i=0;i<a.length;i ){
console.log(i)
a[i].addEventListener('click',function(){
document.cookie = "logedIn=; expires=Thu, 01 Jan 1970 00:00:00 GMT";
document.cookie = "picName=; expires=Thu, 01 Jan 1970 00:00:00 GMT";
document.cookie = "time=; expires=Thu, 01 Jan 1970 00:00:00 GMT";
document.cookie = "admin=; expires=Thu, 01 Jan 1970 00:00:00 GMT";
window.location.reload();
})
}
}
return {
displayButtons,
deleteCookie,
}
})();
Html одинаков на всех страницах с той разницей, что на некоторых страницах logout является выпадающим списком:
<a class="dropdown-item logOut" href="/logOut">Log out</a> // this part works
и на некоторых это ссылка:
a class="nav-link text-white ml-2 logOut" href="/logOut" role="button">Log Out</a> //this doesn't work
Файл JavaScript находится в script в конце файла ejs: <script src="/javascripts/frontend.js"></script>
В чем моя ошибка? У меня есть такие маршруты, как admin — переходит на страницу администратора, и выход из системы работает так, как должен, но если я захожу в admin / users и пытаюсь выйти с этой страницы, файлы cookie не удаляются. Я попытался поместить функцию для удаления файлов cookie в скрипт внутри ejs-файла, но это тоже не работает. В консоли нет ошибок. Пожалуйста, помогите
Файлы cookie устанавливаются в функции входа:
const signIn_post = async(req, res)=>{
try{
const db = req.app.locals.db;
let userIsFound= await db.collection('users').findOne({'userEmail': req.body.user_email});
if (userIsFound === null){
res.render('signIn', {mistakes:['Email or password is wrong'], success:[], emailEJS : req.body.user_email, passwordEJS : req.body.user_password})
} else{
let passwordMatch = req.body.user_password == userIsFound.password;
let role = userIsFound.role;
if (passwordMatchamp;amp;role==0){
if(req.cookies.user === undefined || req.cookies.logedIn === undefined){
const randomID = uuidv4();
await db.collection('cookies').createIndex( { "createdAt":1 }, { expireAfterSeconds: 864000 });
await db.collection('cookies').insertOne({ cookieID:randomID, "createdAt": new Date(), userEmail: userIsFound.userEmail, userName: userIsFound.userName});
await db.collection('users').updateOne({"userEmail": userIsFound.userEmail},{ $set: {"about":randomID}});
res.cookie('user', randomID, { maxAge: 864000000, httpOnly: true });
res.cookie('logedIn','true', { maxAge: 864000000 });
res.render('index');
}
else {
res.send('Logged in ');
};
}
Комментарии:
1. Что вы имеете в виду, «не работает»? Что происходит или не происходит, что является неожиданным или нежелательным? Какие-либо ошибки консоли?
2. ошибок консоли нет, когда я выхожу из системы с определенных страниц, она перенаправляет на домашнюю страницу, но файлы cookie не удаляются, а с нескольких других страниц файлы cookie удаляются, как и должно быть. При выходе из системы следует перенаправить на страницу индекса и удалить все файлы cookie. При выходе из системы на стороне сервера файлы cookie удаляются из базы данных.
3. Покажите, как вы устанавливаете файл cookie? «Путь» особенно важен. Или покажите рабочий пример, потому что об этом трудно догадаться.
4. res.cookie(‘user’, randomID, { maxAge: 864000000, HttpOnly: true }); res.cookie(‘logedIn’,’true’, { maxAge: 864000000 });
5. Я не вижу параметр «path», поэтому он установлен на адрес, с которого он был установлен, другой адрес не имеет к ним доступа. Доступ ко всем возможен, когда «path» имеет значение «/».