Паспорт.authenticate() не перенаправляет

У меня проблема с промежуточным программным обеспечением паспорта, когда я аутентифицирую пользователя, он не перенаправляется, я понятия не имею, что не так.

Вот код и весь проект на GitHub:

const express = require("express");
const router = express.Router();
const passport = require("passport");
const genPassword = require("../passwordUtils").genPassword;
const connection = require("../database");
const User = connection.models.User;
// const logRegController = require("../controllers/log-reg-controller");

router.post(
  "/login",
  passport.authenticate("local", {
    successRedirect: "/",
    failureRedirect: "/register",
  })
);

router.post("/register", async (req, res) => {
  const existingUser = await User.findOne({ username: req.body.username });
  if (existingUser) return res.json({ message: "User already exists" });

  const saltHash = genPassword(req.body.password);

  const { salt, hash } = saltHash;

  const newUser = new User({
    username: req.body.username,
    hash: hash,
    salt: salt,
  });

  newUser.save().then((user) => console.info(user));

  res.status(201).json({ message: "All good" });
});

module.exports = router;

https://github.com/Oliwier965/Photo-App/tree/main

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
41
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете попробовать это с функцией обратного вызова, которая перенаправляет, вы можете сделать это так в соответствии с Документы

router.post('/login', function(req, res, next) {
passport.authenticate('local', function(err, user, info) {
    if (err) { return next(err); }
    if (!user) { return res.redirect('/register'); }
    req.logIn(user, function(err) {
        if (err) { return next(err); }
        //If Successful
        return res.redirect('/');
    });
    })(req, res, next);
});

Все еще не работает, у вас есть другие идеи? Такой странный баг

Oliwier 05.05.2022 17:03

Я нашел решение, спасибо за ваш вклад

Oliwier 05.05.2022 17:59

@Oliwier - вы можете опубликовать свое решение?

Donald Koscheka 06.05.2022 20:50

@DonaldKoscheka Я разместил это как ответ на этот вопрос

Oliwier 07.05.2022 17:26
Ответ принят как подходящий

Уважаемое сообщество StackOverflow, это была непростая битва, но у меня есть ответ.

Проблема заключалась в том, что я отправлял почтовый запрос, используя javascript fetch(), который является интерфейсом для выполнения запросов AJAX. И он специально разработан, чтобы не менять ваш URL. Мое решение состоит в том, чтобы отправить URL-адрес, который я хочу перенаправить, через res.json() со статусом 302 и перенаправить с помощью внешнего интерфейса. Надеюсь, это поможет кому-то, я прикрепляю код ниже.

Бэкэнд

router.post("/login", function (req, res, next) {
  passport.authenticate("local", function (err, user, info) {
    if (err) {
      return next(err);
    }
    if (!user) {
      return res.status(302).json({ redirectUrl: "/register" });
    }
    req.logIn(user, function (err) {
      if (err) {
        return next(err);
      }
      //If Successful
      return res.status(302).json({ redirectUrl: "/" });
    });
  })(req, res, next);
});

ВНЕШНИЙ ИНТЕРФЕЙС

const login = async function (e) {
  e.preventDefault();
  const username = loginForm.querySelector("#email").value;
  const password = loginForm.querySelector("#password").value;

  const response = await fetch("/login", {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      username,
      password,
    }),
  });

  const result = response.json();

  const data = await result;

  const { redirectUrl } = data;

  window.location.href = redirectUrl;
};

Другие вопросы по теме