javascript - 如何在 PassportJS 中使用猫鼬鉴别器,因为密码没有被保存?
问题描述
使用(派生的)农民模式注册后,不会保存用户的密码。其他一切都在被保存。这是由于使用 PassportJS 造成的,因为它不允许将密码保存到 User 模型中吗?我是 MongoDB 和猫鼬的初学者,任何帮助将不胜感激。下面是相同的代码。
user.js(基本架构)
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
var mongooseUniqueValidator = require('mongoose-unique-validator');
var passportLocalMongoose = require('passport-local-mongoose');
const User = new Schema({
firstname : {
type: String,
required: true
},
lastname : {
type: String,
required: false,
default: "Empty last name"
},
admin: {
type: Boolean,
default: false
}
});
User.plugin(passportLocalMongoose);
module.exports = mongoose.model('User', User);
farmer.js (派生模式)
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
var User = require('./user');
var mongooseUniqueValidator = require('mongoose-unique-validator');
const Farmer = User.discriminator('Farmer', new Schema(
{
state : {
type : String,
required: false
}
})
);
module.exports = mongoose.model('Farmer');
用户注册 POST 操作
router.post('/signup', (req, res, next) => {
User.register( new User({username: req.body.username}), req.body.password,
(err, user) => {
if(err) {
res.statusCode = 500;
res.setHeader('Content-Type', 'application/json');
res.json({err: err});
}
else {
if(req.body.firstname){
user.firstname = req.body.firstname;
}
if(req.body.lastname){
user.lastname = req.body.lastname;
}
user.save((err, user) => {
if(err) {
res.statusCode = 500;
res.setHeader('Content-Type', 'application/json');
res.json({err: err});
return;
}
passport.authenticate('local')(req, res, () => {
res.statusCode = 200;
res.setHeader('Content-Type', 'application/json');
res.json({success: true, status: 'Registration Successful!'});
});
})
}
});
});
农民的注册 POST 操作
.post( (req, res, next) => {
Farmer.create(req.body)
.then((farmer) => {
console.log('Farmer has been created ', farmer);
res.statusCode = 200;
res.setHeader('Content-Type', 'application/json');
res.json(farmer);
}, (err) => next(err))
.catch((err) => next(err));
})
解决方案
推荐阅读
- wolfram-mathematica - Mathematica:如何评估这个函数?
- visual-studio-code - VS Code 远程 SSH 连接不起作用
- python - 如何设置互联网网络来控制机器人?
- swift - 由于手表套件,应用程序不会为设备编译 - ValidateEmbeddedBinary 失败
- palantir-foundry - 在 Foundry Transforms 中保存 CSV 文件
- python - python - assert_called_with 其中 AttributeError 作为 arg 传递
- c# - 使用 C# 检查 List 中是否存在值
- r - 在R中将两个数据框制作成相同的形式
- python - 覆盖继承的属性设置器(不带 fset)
- ios - 运行时的 swift_unexpectedError 到底是什么?