首页 > 解决方案 > 如何在 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));
})

标签: javascriptnode.jsmongodbmongoosepassport.js

解决方案


推荐阅读