簡體   English   中英

使用Mongoose模式驗證用戶名

[英]Validating username with Mongoose schema

我正在嘗試先驗證用戶名,然后再將其保存到mongodb。 但是相反,保存或驗證消息是我在終端中看到以下消息:

“ if(user.path(username)){TypeError:user.path不是函數”

這是什么意思? 我是新手。

這是我的user.js

var User = require('models/user').User;
var HttpError = require('error').HttpError;
var async = require('async');


exports.get = function(req, res) {
res.render('login', { title: 'Login'});
};

exports.post = function(req, res, next) {
  var username = req.body.username;
  var password = req.body.password;

async.waterfall([
    function(callback) {
        User.findOne({username: username}, callback);
    },
    function(user, callback) {
        if (user) {
            if (user.checkPassword(password)) {
                callback(null, user);
            } else {
                next(new HttpError(403, "wrong password"));
            }
        } else {
            var user = new User({username: username, password: password});
            if(user.path(username)){
                callback(null, user);
                user.save(function(err) {
                    console.log(err.message)
                    if (err)
                        return next(err);
                    callback(user);
                });
            }else{ next(new HttpError(403, "Incorrect username"));

            };
        }
    }
], function(err, user){
    if (err) return next(err);
    req.session.user = user._id;
    res.send({});
});

這是我的login.js

var crypto = require('crypto');

var mongoose = require('lib/mongoose'),
Schema = mongoose.Schema;

var schema = new Schema({
username: {
    type: String,
    unique: true,
    required: true
},

hashedPassword: {
    type: String,
    required: true
},
salt: {
    type: String,
    required: true
},
created: {
    type: Date,
    default: Date.now
}
});


schema.path('username').validate(function (value, respond) {
  return /[0-9]{6,15}[a-zA-Z]/.test(value, function(){
    respond(false, 'this message gets to the validation error');
});
}, '{VALUE} is not a valid login - [0-9]{6,15}[a-zA-Z]')


schema.methods.encryptPassword = function(password) {
  return crypto.createHmac('sha1', this.salt).update(password).digest('hex');
};

schema.virtual('password')
  .set(function(password) {
      this._plainPassword = password;
      this.salt = Math.random() + '';
      this.hashedPassword = this.encryptPassword(password);
})
.get(function() { return this._plainPassword; });


schema.methods.checkPassword = function(password) {
  return this.encryptPassword(password) === this.hashedPassword;
};

schema.path('username').validate(function (value) {
  return /[0-9]{6,15}[a-zA-Z]/.test(value);
}, 'Invalid color');

exports.User = mongoose.model('User', schema);

保存為vaildate之前,您無需調用任何內容,貓鼬會為您完成此操作。 完成操作后也不要調用callback

還要在執行console.log(err.message)之前檢查是否發生錯誤,因為如果現在發生errerrnull

所以這應該工作:

} else {
    var user = new User({username: username, password: password});
    user.save(function(err) {
        if (err) {
            console.log(err.message);
            return next(err);
        }
        callback(user);
    });
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM