【发布时间】:2020-06-22 20:51:50
【问题描述】:
我正在尝试使用 passport-local-mongoose 来验证用户身份。每当我尝试登录时,我都会收到一个验证错误,提示我的用户缺少密码。我的 app.js 文件内容如下:
const express = require('express');
const bodyParser = require('body-parser');
const ejs = require('ejs');
const mongoose = require('mongoose');
const session = require('express-session');
const passport = require('passport');
const passportLocalMongoose = require('passport-local-mongoose');
const url = `mongodb://127.0.0.1:27017/secretsDB`;
const port = process.env.PORT ? process.env.PORT : 4000;
require('dotenv').config();
const app = express();
app.use(express.static(`${__dirname}/public`));
app.use(bodyParser.urlencoded({extended: true}))
app.set('view engine', 'ejs');
app.use(session({
secret: process.env.SECRET,
resave:false,
saveUninitialized: false
}));
app.use(passport.initialize());
app.use(passport.session());
mongoose.connect(url, {useNewUrlParser: true, useUnifiedTopology: true});
mongoose.set('useCreateIndex', true);
const userSchema = new mongoose.Schema({
username: {
type: String,
required: true
},
password: {
type: String,
required: true
}
});
userSchema.plugin(passportLocalMongoose);
const User = new mongoose.model('User', userSchema);
passport.use(User.createStrategy());
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());
app.get('/', (req, res) => {
res.render('home');
});
app.get('/login', (req, res) => {
res.render('login');
});
app.get('/register', (req, res) => {
res.render('register');
});
app.get('/secrets', (req, res) => {
if(req.isAuthenticated()) {
res.render('secrets');
} else {
res.redirect('/login');
}
});
app.get('/logout', (req, res) => {
req.logout();
res.redirect('/');
});
app.post('/register', (req, res) => {
User.register({username: req.body.username}, req.body.password, (err, user) => {
if(err) {
console.log(err);
res.redirect('/register');
} else {
passport.authenticate('local')(req, res, () => {
res.redirect('/secrets');
});
}
});
});
app.post('/login', (req, res) => {
const user = new User({
username: req.body.username,
password: req.body.password
});
req.login(user, (err) => {
if(err) {
console.log(err);
} else {
passport.authenticate('local')(req, res, () => {
res.redirect('/secrets');
});
}
})
});
app.listen(port, () => {
console.log(`app is listening on ${port}`);
});
我的github repository 包含整个项目
The error in the console is as follows:
Error: User validation failed: password: Path `password` is required.
at ValidationError.inspect (/home/anthony/Documents/Code/Angela/Secrets/node_modules/mongoose/lib/error/validation.js:48:26)
at formatValue (internal/util/inspect.js:703:31)
at inspect (internal/util/inspect.js:272:10)
at formatWithOptions (internal/util/inspect.js:1887:40)
at Object.Console.<computed> (internal/console/constructor.js:284:10)
at Object.log (internal/console/constructor.js:294:61)
at /home/anthony/Documents/Code/Angela/Secrets/app.js:80:21
at /home/anthony/Documents/Code/Angela/Secrets/node_modules/passport-local-mongoose/index.js:247:59
at processTicksAndRejections (internal/process/task_queues.js:97:5) {
errors: {
password: ValidatorError: Path `password` is required.
at validate (/home/anthony/Documents/Code/Angela/Secrets/node_modules/mongoose/lib/schematype.js:1178:13)
at /home/anthony/Documents/Code/Angela/Secrets/node_modules/mongoose/lib/schematype.js:1161:7
at Array.forEach (<anonymous>)
at SchemaString.SchemaType.doValidate (/home/anthony/Documents/Code/Angela/Secrets/node_modules/mongoose/lib/schematype.js:1106:14)
at /home/anthony/Documents/Code/Angela/Secrets/node_modules/mongoose/lib/document.js:2387:18
at processTicksAndRejections (internal/process/task_queues.js:79:11) {
properties: [Object],
kind: 'required',
path: 'password',
value: undefined,
reason: undefined,
[Symbol(mongoose:validatorError)]: true
}
},
_message: 'User validation failed'
}
我查看了我的代码,进行了谷歌搜索,但我似乎找不到答案。谁能帮忙。
【问题讨论】:
标签: node.js mongoose passport.js