简体   繁体   English

passport.authenticate没有被执行

[英]passport.authenticate not being executed

I'm trying to set up a login route, using Express, Node, and React-Router. 我正在尝试使用Express,Node和React-Router建立登录路由。

passport.authenticate is not being called. passport.authenticate没有被调用。 The console.log 's aren't registering to the console. console.log没有注册到控制台。 Can someone help me figure out why and how to fix it? 有人可以帮我弄清楚为什么以及如何解决它? Thanks in advance. 提前致谢。

server.js 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 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 file 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);
    });
  });

};

EDIT Could it have something to do with my webpack-config file? 编辑它可能与我的webpack-config文件有关吗?

webpack-config.js 的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'),
      },
    ],
  },
};

If you are using username key email and password key pass , what about try to use this? 如果您正在使用的用户名关键email和密码键pass ,一下一下尝试使用这个?

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM