Использовать паспортную аутентификацию без параметра successRedirect - PullRequest
0 голосов
/ 14 февраля 2019

Я использую локальную стратегию со следующей конфигурацией:

passport.use(
  new LocalStrategy((username, password, done) => {
    process.nextTick(() => {
      findByUsername(username, (err, user) => {
        if (err) {
          return done(err);
        }
        if (!user) {
          return done(null, false, { message: `Unknown user ${username}` });
        }
        if (user.password !== password) {
          return done(null, false, { message: "Invalid password" });
        }
        return done(null, user);
      });
    });
  })
);

И конечная точка login определяется ниже следующим образом:

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

Это успешно работает какожидается, однако мне не нужно использовать опцию successRedirect, но если я уберу эту опцию, я получу ответ кода состояния 404 при выполнении запроса:

POST http://localhost:3001/login 404 (не найдено)

Вот код без successRedirect:

server.post("/login", passport.authenticate("local"));

Я также пытался настроить authenticate с другими параметрами, но безsuccessRedirect, но я получаю то же сообщение об ошибке.

Используемые версии зависимостей: express 4.16.4, passport 0.4.0 и passport-local 1.0.0

1 Ответ

0 голосов
/ 26 февраля 2019

Попробуйте это

 passport.authenticate('local',function (err, user, info) { 

     if(err){
       res.redirect('/login')
     } else{
      if (! user) {
        res.redirect('/login')
      } else{
        req.login(user, function(err){
          if(err){
          res.redirect('/login')
          }else{
       res.redirect('/success')
          }
        })
      }
     }
  })(req, res);
...