Я пытаюсь перенаправить пользователя на страницу '/welcome' после успешной авторизации, но этого не происходит. С текущим кодом пользователь так и остается на странице логина. Я ожидаю перенаправления в строке " return fetch('/welcome', fetchOptions2 )" - и похоже, что не совсем верно понимаю, как работает fetch, раз перенаправления не происходит; Статус ответа сервера 304 Not Mofified. Проверка через postman показала, что сервер работает корректно.
Вот мой код на клиенте:
const formEl = document.getElementById('form-submit');
formEl.addEventListener('submit', function(event) {
event.preventDefault();
// 1.Headers
const headers1 = new Headers();
headers1.set('Accept', 'application/json');
const headers2 = new Headers();
headers2.set('Authorization', localStorage.getItem('token'));
const formData = new FormData(formEl);
// 2. Make the requests
const url = '/auth/login';
const fetchOptions1 = {
method: 'POST',
headers: headers1,
body: formData
};
const fetchOptions2 = {
method: 'GET',
headers: headers2
};
const responsePromise = fetch(url, fetchOptions1);
responsePromise
.then(function(response) {
return response.json();
})
//Do something with the JSON data
.then(function(jsonData) {
window.localStorage.setItem('token', jsonData.token);
//and another fetch
return fetch('/welcome', fetchOptions2 ); //здесь я ожидаю перенаправления
})
.then(function(response) {
console.log(response);
})
.catch(function(error) {
console.log('Request failed', error)
});
});
Сервер:
router.get('/welcome',
passport.authenticate('jwt', { session: false }),
(req, res) => {
res.render('welcome.ejs')
});
Ну и второй вопрос. Что если пользователь попытается зайти на страницу welcome, вбив это в строку браузера, как в таком случае устанавливать заголовок? 'Authorization', localStorage.getItem('token'). Видел как это делается в реакте - в корневом компоненте. Но в этом приложении у меня другая логика - сервер отдает шаблоны. Как это сделать в таком приложении не совсем понимаю.