Javascript 使用passport使用NodeJs mongodb(mongoose)express注册表格

Javascript 使用passport使用NodeJs mongodb(mongoose)express注册表格,javascript,node.js,mongoose,passport.js,Javascript,Node.js,Mongoose,Passport.js,我有一个带有用户名密码电子邮件等字段的注册表单,我使用mongodb存储这些数据我的模式如下所示: var mongoose = require("mongoose"); var Schema = mongoose.Schema; const passportLocalMongoose = require("passport-local-mongoose"); var User = new Schema( { username: {type: String, required: t

我有一个带有用户名密码电子邮件等字段的注册表单,我使用mongodb存储这些数据我的模式如下所示:

var mongoose = require("mongoose");
var Schema = mongoose.Schema;
const passportLocalMongoose = require("passport-local-mongoose");
 var User = new Schema(
  {
    username: {type: String, required: true,unique: true },
    password: {type: String,required: true },
    email: { type: String, unique: true, required: true },
    admin: { type: Boolean, default: false }},
  { usePushEach: true},
  {timestamps: true }
);    
User.plugin(passportLocalMongoose);
module.exports = mongoose.model("User", User);
在使用以下代码访问端点之前,我有一个中间件:

var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var User = require('./models/user');

exports.local = passport.use(new LocalStrategy(User.authenticate()));
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());
我有一个结束点来点击注册,我写了以下内容:

router.post("/signup", (req, res, next) => {
  Users.register(
 new Users({ username: req.body.username,email:req.body.email }),
 req.body.password,

 function(err, account) {
   if (err) {
        res.statusCode = 500;
        res.setHeader("Content-Type", "application/json");
        res.json({ err: "err" });
      }
      passport.authenticate("local")(req, res, function() {
        res.send("/books");
      })})});
更改后,当我通过带有用户名密码的json对象发送电子邮件时,我在postman中遇到了这个错误

{
    "err": {
        "errors": {
            "password": {
                "message": "Path `password` is required.",
                "name": "ValidatorError",
                "properties": {
                    "message": "Path `password` is required.",
                    "type": "required",
                    "path": "password"
                },
                "kind": "required",
                "path": "password",
                "$isValidatorError": true
            }
        },
        "_message": "User validation failed",
        "message": "User validation failed: password: Path `password` is required.",
        "name": "ValidationError"
    }
}

有谁能帮我解决这个问题,无论是我对npm软件包有问题,还是有任何我必须处理的回电,我都不知道

看起来您不想在架构中定义密码。护照本地猫鼬会帮你处理的

“您可以自由定义自己喜欢的用户。Passport Local Mongoose将添加用户名、哈希和salt字段来存储用户名、哈希密码和salt值。”-

请尝试以下方法:

var mongoose = require("mongoose");
var Schema = mongoose.Schema;
const passportLocalMongoose = require("passport-local-mongoose");
 var User = new Schema(
  {
    username: {type: String, required: true,unique: true },
    email: { type: String, unique: true, required: true },
    admin: { type: Boolean, default: false }},
  { usePushEach: true},
  {timestamps: true }
);    
User.plugin(passportLocalMongoose);
module.exports = mongoose.model("User", User);

router.post('/signup', (req, res, next) => {
  Users.register(
    new Users({ username: req.body.username, email: req.body.email}),
    req.body.password,
    function(err, account) {
      if (err) {
        res.statusCode = 500;
        res.setHeader('Content-Type', 'application/json');
        res.json({ err: 'err' });
      }
      passport.authenticate('local')(req, res, function() {
        res.send('/books');
      });
    }
  );
});

请告诉我这是否解决了您的问题。

您好,谢谢您的回复,我尝试过,但出现了以下错误:(节点:16132)未处理PromisejectionWarning:TypeError:Pass短语必须是pbkdf2(crypto.js:702:20)处Object.exports.pbkdf2(crypto.js:682:10)处pbkdf2的缓冲区(D:\reactLibrary\server\node\u modules\passport local mongoose\lib\pbkdf2.js:8:12)这很有趣。您是否检查了req.body.password是否存在?这很奇怪,因为您试图在第三行创建一个新用户,但如果不在文档中包含密码(根据架构定义),您也不能这样做。运行我的代码时出现的错误是,您需要将密码转换为缓冲区才能使其有效。好的,我正在查看文档,您似乎不想在架构中定义密码字段;passport local mongoose将为您解决此问题。将更新我的答案,这将解决问题你的问题是的!请看上面的新代码。Passport local mongoose会为你处理的。这是供参考的文件-