#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) => {
// ...
}
));