404 Ошибка после успешной аутентификации с помощью Passport. js, если не перенаправлено на '/' - PullRequest
0 голосов
/ 24 марта 2020

У меня есть сервер Express на сервере, который использует Passport. js для аутентификации. Даже при успешной аутентификации ошибка 404 отображается в веб-браузере при перенаправлении в «/ about», «/ login» или любом другом пути (все эти пути существуют во внешнем интерфейсе), или даже если он не перенаправлен. Единственный раз, когда 404 не отображается, это если происходит перенаправление на '/'. Я включу соответствующие фрагменты кода ниже.

пользователей. js

router.post('/api/login', function(req, res, next) {
  passport.authenticate('local', function(err, user, info) {
    if (err) { return next(err); }
    if (!user) { return res.redirect('/login'); }
    req.logIn(user, function(err) {
      if (err) { return next(err); }
      // res.statusCode is still 200 here!!!!!!!!
      return res.redirect('/about');
    });
  })(req, res, next);
})

Альтернативные пользователи. js (имеет ту же проблему)

router.post('/api/login',
  passport.authenticate('local', { successRedirect: '/about',
                                   failureRedirect: '/login' }))

passportLocalStrategy. js

const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;

const init = require('./passportSessionConfig');
const knex = require('../db/connection');
const authUtils = require('./utils')

init();

passport.use(new LocalStrategy({
  usernameField: 'email',
  passwordField: 'password',
},
function (username, password, done) {
  // check to see if the username exists
  knex('users')
  .where({ 'email': username })
  .orWhere({ username })
  .first()
  .then((results) => {
    if (!results) return done(null, false);
    if (!authUtils.comparePass(password, results.password)) {
      return done(null, false);
    } else return done(null, results);
  })
  .catch((err) => { return done(err); });
}));

module.exports = passport;

Это код внешнего интерфейса javascript, который сделал запрос (Vue. js)

methods: {
  login: function(e) {
    e.preventDefault();
    let data = {
      email: this.email,
      password: this.password,
      returnTo: window.location.pathname
    };
    this.axios
      .post("/api/login", data)
      .then(response => {
        console.log("Logged in");
        this.$router.push("/about");
      })
      .catch(errors => {
        console.log("Cannot log in");
        console.log(errors);
      });
  }
}

Это ошибка 404 из веб-браузера This is the 404 error from the webbrowser

...