Почему не происходит редирект при авторизации? — Хабр Q&A

Почему не происходит редирект при авторизации?

Код вроде рабочий, но никакого редиректа на главную не происходит, хотя видно, что 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 токенов, и при проверке логина и пароля токен выдается, но как сделать чтобы после успешного получения токена пользователя перенаправляли на другую страницу?

Похожее:  TLauncher - вход в личный кабинет

вот код получения токена:

<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 пробовал

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector