node.js - 无法使用 Passport 在 Node 中处理登录
问题描述
我正在开发一个简单的 MERN Stack 项目,我需要在其中实现用户登录和注册。我可以注册用户帐户但无法登录系统。尽管我输入的用户名是正确的,但我收到了以下消息。
var app = express();
app.set("view engine", "ejs");
app.use(bodyParser.urlencoded({ extended: true }));
app.use(express.static('public'));
app.use(require("express-session")({
secret: "Rusty is a dog",
resave: false,
saveUninitialized: false
}));
app.use(passport.initialize());
app.use(passport.session());
//require('./models/Users')
//passport.use(Users.createStrategy());
//passport.use(new LocalStrategy(Users.authenticate()));
passport.use(new LocalStrategy({
usernameField: 'email', // this is where you do that
passwordField: 'password'
},
(email, password, done) => {
User.findOne({
email: email
}, (error, user) => {
if (error) {
console.log(error)
return done(error);
}
if (!user) {
console.log("User not found")
return done(null, false, {
message: 'Username or password incorrect'
});
}
// Do other validation/check if any
console.log("Auth done")
return done(null, user);
});
}
));
passport.serializeUser(Users.serializeUser());
passport.deserializeUser(Users.deserializeUser());
/* balance code */
app.post("/login", passport.authenticate("local", {
successRedirect: "/shop",
failureRedirect: "/login",
//failureFlash:true
}), function (req, res) {
res.redirect('/shop')
}
);
下面是我得到的错误
ctor [MissingUsernameError]: No username was given
at G:\test1\node_modules\passport-local-mongoose\index.js:231:17
at processTicksAndRejections (internal/process/task_queues.js:93:5)
解决方案
我认为您没有正确使用护照。这里有一个猫鼬的例子在我的系统上工作正常
passport.use(new LocalStrategy({
usernameField: 'email', // this is where you do that
passwordField: 'password'
},
(email, password, done) => {
User.findOne({
email: email
}, (error, user) => {
if (error) {
return done(error);
}
if (!user) {
return done(null, false, {
message: 'Username or password incorrect'
});
}
// Do other validation/check if any
return done(null, user);
});
}
));
passport.serializeUser(function (user, done) {
done(null, user.id);
});
passport.deserializeUser(function (id, done) {
User.findById(id, function (err, user) {
done(err, user);
});
});
//对于路由
const forwardAuthenticated = (req, res, next) => {
if (!req.isAuthenticated()) {
return next();
}
res.redirect('/index.html');
}
app.post("/login", forwardAuthenticated, function (req, res) {
res.redirect('/shop')
});
推荐阅读
- zsh - OSX launchctl ZSH Shell 脚本不等待外部程序完成
- testing - 如果我们在圆周图中有多个开始和停止会发生什么
- node.js - 使用 Typescript 和 JSForce 的 Webpack 编译错误
- python-3.x - 在python中调用函数时没有文件错误
- google-cloud-ml - 从自定义预测类中获取正在运行的项目 ID
- php - PHP如何从相同的字符串创建相同的哈希?
- javascript - 单击按钮时显示不同的组件
- jquery - Rotate Parent Div's 移动子 Div 的位置
- syntax - 我有语法错误,我不知道如何修复它们
- angular - 在一个组件上管理多个 RxJs Observables