Javascript Passport无法读取属性';密码';未定义的
我目前正在使用Express、Node、Mongoose和Passport.js开发一个注册和登录系统,注册基本正常(除了successRedirect不工作),但登录系统存在一个大问题。由于某种原因,我创建的passport方法无法读取未定义的“密码”,因此出现了未定义的情况,但我似乎无法理解。另外,如果有人知道为什么我的注册路径上的成功重定向不起作用,我们将不胜感激 Passport配置文件:Javascript Passport无法读取属性';密码';未定义的,javascript,node.js,mongodb,authentication,passport.js,Javascript,Node.js,Mongodb,Authentication,Passport.js,我目前正在使用Express、Node、Mongoose和Passport.js开发一个注册和登录系统,注册基本正常(除了successRedirect不工作),但登录系统存在一个大问题。由于某种原因,我创建的passport方法无法读取未定义的“密码”,因此出现了未定义的情况,但我似乎无法理解。另外,如果有人知道为什么我的注册路径上的成功重定向不起作用,我们将不胜感激 Passport配置文件: var LocalStrategy = require("passport-local&
var LocalStrategy = require("passport-local").Strategy;
const User = require("../user");
const passport = require("passport");
const crypto = require("crypto");
//Signup method
module.exports = (passport) => {
passport.serializeUser((user, done) => {
done(null, user.id);
});
passport.deserializeUser((id, done) => {
User.findById(id, (err, user) => {
done(err, user);
});
});
};
passport.use(
"local-signup",
new LocalStrategy(
{
usernameField: "email",
passwordField: "password",
passReqToCallback: true,
},
(req, email, password, done) => {
process.nextTick(() => {
User.findOne({ email: email }, (err, user) => {
if (err) {
return done(err);
}
if (user) {
return done(
null,
false,
req.flash("signupMessage", "That email is already taken.")
);
} else {
let token = crypto.randomBytes(64).toString("hex");
const user = new User();
user.name = req.body.username;
user.email = email;
user.password = user.generateHash(password);
user.verificationHash = token;
user.save();
}
});
});
}
)
);
// Login method
passport.use(
"local-login",
new LocalStrategy(
{
usernameField: "email",
passwordField: "password",
passReqToCallback: true,
},
(req, email, password, done) => {
User.findOne({ email: email }, (err, user) => {
if (err) {
return done(err);
}
if (!user) {
return done(null, false, req.flash("loginMessage", "No user found."));
}
if (!user.validPassword(password)) {
return done(
null,
false,
req.flash("loginMessage", "Oops! Wrong password")
);
}
return done(null, user);
});
}
)
);
index.js路由:
app
.route("/register")
.get((req, res) => {
res.render("register", { message: req.flash("signupMessage") });
})
.post(
passport.authenticate("local-signup", {
successRedirect: "/verify/emailSent",
failureRedirect: "/register",
failureFlash: true,
}),
(req, res) => {
}
);
app
.route("/login")
.get((req, res) => {
res.render("login", { message: req.flash("loginMessage") });
})
.post(
passport.authenticate("local-login", {
successRedirect: "/verify/emailSent",
failureRedirect: "/login",
failureFlash: true,
}),
(req, res) => {
//if this gets called authentication was succesful.
//req.user is the authenticated user
}
);
登录文件:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Login</title>
</head>
<body>
<h1>Login</h1>
<% if (message.length > 0) { %>
<div class="alert alert-danger"><%= message %></div>
<% } %>
<form action="/login" method="POST">
<label for="email">Email</label>
<input type="email" name="email" id="email" required />
<label for="password">Password</label>
<input type="password" name="password" id="password" required />
<button type="submit">Log in</button>
</form>
<a href="/register">Register</a>
<a href="/">Home</a>
</body>
</html>
登录
登录
0) { %>
电子邮件
密码
登录
This:user.password
是您唯一使用的.password
位置。user
包含什么?您是否尝试放置控制台.log(用户);
看看里面有什么?我的坏,完全忘了共享我的模式。user.password
将来自存储在user.js文件中的模式,该文件有一个密码字段。因此,当我创建一个新的user
并将其分配给变量user
时,我正在将密码传递给该模式。我的坏之处在于没有包含密码字段。to回答您的问题,用户将是另一个文件中的预制架构。@PraveenOkay,我明白了。但是当您放置console.log(user);
时,那里发生了什么事?您是否得到了您不期望的结果?