passport.проверка подлинности не выполняется

#node.js #express #passport.js

#node.js #выразить #passport.js

Вопрос:

Я пытаюсь настроить маршрут входа, используя Express, Node и React-Router.

passport.authenticate не вызывается. console.log Не регистрируются на консоли. Может кто-нибудь помочь мне выяснить, почему и как это исправить? Заранее спасибо.

server.js

 const express = require('express');
const app = express();
const bodyparser = require("body-parser");
const passport = require("passport");
const session = require("express-session");

// http://expressjs.com/en/starter/static-files.html
app.use(express.static('public'));

// bodyparser middleware
app.use(bodyparser.urlencoded({ extended: false }));
app.use(bodyparser.json());

// import passport-config file
require("./passport-config")(passport);

// express-session middleware
app.use(session({
  secret: process.env.SECRET,
  resave: false,
  saveUninitialized: false
}));

// passport middleware
app.use(passport.initialize());
app.use(passport.session());

const routes = require('./routes.js');
routes(app);

// listen for requests :)
const listener = app.listen(process.env.PORT, () => {
console.log('Your app is listening on port '   listener.address().port);
});
  

routes.js

 module.exports = (app, database) => {

  mongoose.connect(process.env.DATABASE, { useNewUrlParser: true });
  const db = mongoose.connection;

  app.post('/login', (req, res, next) => {
    console.log("login"); // registering to console
    passport.authenticate("local", {
      successRedirect: "/dashboard",
      failureRedirect: "/login"
    })(req, res, next);
    console.log("login2"); // registering to console
  });
}
  

passport-config.js файл

 mongoose.connect(process.env.DATABASE, { useNewUrlParser: true });
const db = mongoose.connection;

module.exports = (passport) => {
  console.log("passport"); // <- not registering in console
  passport.use(new LocalStrategy((e_mail, pass, done) => {

    console.log(e_mail); // <- not registering in console
    console.log(pass); // <- not registering in console

    let email = e_mail.toLowerCase();
    let query = { email: email };

    User.findOne(query, (err, user) => {
      if (err) { console.log(err); }
      if (!user) {
        return done(null, false, { message: "No user found or password incorrect" });
      }

      bcrypt.compare(pass, user.password, (error, isMatch) => {
        if (error) { console.log(error); }
        else {
          if (isMatch) {
            return done(null, user);
          }
          else {
            return done(null, false, { message: "No user found or password incorrect" });
          }
        }
      });
    });
  }));

  passport.serializeUser((user, done) => {
    done(null, user._id)
  });

  passport.deserializeUser((id, done) => {
    User.findById(id, (err, user) => {
      done(err, user);
    });
  });

};
  

Редактировать
Может ли это иметь какое-то отношение к моему файлу webpack-config?

webpack-config.js

 const path = require('path');

module.exports = {
  mode: 'production',
  context: path.join(__dirname, './'),
  entry: './app/app.jsx',
  output: {
    path: path.join(__dirname, 'public'),
    filename: 'bundle.js',
  },
  resolve: {
    extensions: ['.js', '.jsx'],
  },
  module: {
    rules: [
      {
        test: /.jsx?$/,
        // loader: 'jsx-loader',
        use: {
          loader: 'babel-loader'
        },
        exclude: /node_modules/,
        include: path.join(__dirname, 'app'),
      },
    ],
  },
};
  

Ответ №1:

Если вы используете ключ имени пользователя email и ключ пароля pass , как насчет попытки использовать это?

  passport.use(new LocalStrategy({
    usernameField: 'e_mail',
    passwordField: 'pass'
  },
  (e_mail, pass, done) => {
    // ...
  }
));