Задать вопрос
@PlasterTom

Почему не срабатывает редирект?

Я пытаюсь перенаправить пользователя на страницу '/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'). Видел как это делается в реакте - в корневом компоненте. Но в этом приложении у меня другая логика - сервер отдает шаблоны. Как это сделать в таком приложении не совсем понимаю.
  • Вопрос задан
  • 149 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
teknik2008
@teknik2008
Расскажите про GOLANG. Мне интересно
window.localStorage.setItem('token', jsonData.token);
            //and another fetch
            return fetch('/welcome', fetchOptions2 ); //тут просто скрытый запрос на сервер


window.localStorage.setItem('token', jsonData.token);
 location.href='/welcome' // тут редирект на др страницу фронта
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы