Почему не происходит редирект при авторизации?
Код вроде рабочий, но никакого редиректа на главную не происходит, хотя видно, что serializeUser работает:
PASSPORT.JS
passport.serializeUser((user, done) => {
console.log("USER:", user);
done(null, user.id);
});
passport.deserializeUser((id, done) => {
console.log(id);
User.findOne({
where: {id: id}
})
.then(({dataValues: user}) => {
done(null, user);
})
.catch(err => {
done(err, null);
});
});
passport.use(new LocalStrategy((username, password, done) => {
console.log(username)
User.findOne({
where: {username: username}
})
.then(({dataValues: user}) => {
if (!user) {
return done(null, false, { message: 'Incorrect username.' });
}
User.validPassword(password, user.password)
.then(isMatch => {
if (isMatch) {
return done(null, user);
} else {
return done(null, false, { message: 'Incorrect password.' });
}
})
})
.catch(done);
}));
module.exports = passport;
ROUTING
app.get('/login', (req, res) => {
res.set('Content-Type', 'text/html');
res.render('create_user.pug');
});
app.post('/login', (req, res, next) => {
passport.authenticate('local', function(err, user, info) {
if (err) { return next(err); }
if (!user) {
console.log("REDIRECT", 'login')
return res.redirect('/login');
}
req.logIn(user, function(err) {
if (err) { return next(err); }
console.log("REDIRECT", user)
return res.redirect('/');
});
})(req, res, next);
});
// all
app.get('/*', (req, res, next) => {
if (!req.isAuthenticated()) {
res.redirect('/login');
} else {
next();
}
});
require('./routes/index')(app);
Jquery не выполняет редирект при авторизации
Пользователь вводит данные авторизации. Они проверяются и отправляются на сервер. Сервер возвращает при успехе redirect, по которому jquery переходит и получает другую страницу, которая должна быть отображена в этой же вкладке браузера, с новым адресом, который пришёл в редиректе, в ответе на jquery запрос. При этом текущая страница пользователя остаётся неизменной. Как сделать, чтобы jquery отправлял запрос на сервер, не переходил по редиректу и текущая страница браузера перешла по этому редиректу?
$.post({
url: "/login",
data: data_json,
success: function (data) {
alert(data);
},
statusCode: {
}
})
Как сделать перенаправление на другую локальную страницу при получении jwt-токена?
Использую авторизацию с помощью JWT токенов, и при проверке логина и пароля токен выдается, но как сделать чтобы после успешного получения токена пользователя перенаправляли на другую страницу?
вот код получения токена:
<script type="text/javascript">
var tokenKey = "accessToken";
// отпавка запроса к контроллеру AccountController для получения токена
async function getTokenAsync() {
// получаем данные формы и фомируем объект для отправки
const formData = new FormData();
formData.append("grant_type", "password");
formData.append("username", document.getElementById("emailLogin").value);
formData.append("password", document.getElementById("passwordLogin").value);
// отправляет запрос и получаем ответ
const response = await fetch("/token", {
method: "POST",
headers: { "Accept": "application/json" },
body: formData
});
// получаем данные
const data = await response.json();
// если запрос прошел нормально
if (response.ok === true) {
// сохраняем в хранилище sessionStorage токен доступа
sessionStorage.setItem(tokenKey, data.access_token);
console.log(data.access_token);
}
else {
// если произошла ошибка, из errorText получаем текст ошибки
console.log("Error: ", response.status, data.errorText);
}
};
// отправка запроса к контроллеру ValuesController
async function getData(url) {
const token = sessionStorage.getItem(tokenKey);
const response = await fetch(url, {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": "Bearer " token // передача токена в заголовке
}
});
if (response.ok === true) {
const data = await response.json();
alert(data)
}
else
console.log("Status: ", response.status);
};
// получаем токен
document.getElementById("submitLogin").addEventListener("click", e => {
e.preventDefault();
getTokenAsync();
});
</script>
getData и getDataAsync пробовал