Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Node.js+;莫戈斯验证_Javascript_Node.js_Validation_Mongoose - Fatal编程技术网

Javascript Node.js+;莫戈斯验证

Javascript Node.js+;莫戈斯验证,javascript,node.js,validation,mongoose,Javascript,Node.js,Validation,Mongoose,我有以下用户授权路径代码: var User = require('models/user').User; var HttpError = require('error').HttpError; var AuthError = require('models/user').AuthError; var async = require('async'); exports.get = function(req, res) { res.render('lobby', {title: 'Lobb

我有以下用户授权路径代码:

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

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


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


User.authorize(username, password, function (err, user) {
    if (err) {
        if (err instanceof AuthError) {
            return next(new HttpError(403, err.message));

        } else {
            return next(err);
        };
    };
    req.session.user = user._id;
    res.send({});
});

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

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


var user = new User({username: username, password: password})
user.save(function (err, user) {
    if (err) {
        if (err instanceof AuthError) {
            return next(new HttpError(403, err.message));

        } else {
            return next(err);
        };
    };
    req.session.user = user._id;
    res.send({});
});
这是我的用户模型代码:

    var crypto = require('crypto');
    var async = require('async');
    var util = require('util');


    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.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.statics.authorize = function(username, password, callback) {

        async.waterfall([
            function(callback) {
                User.findOne({username: username}, callback);
            },
            function(user, callback) {
                if (user) {
                    if (user.checkPassword(password)) {
                        callback(null, user);
                    } else {
                        callback(new AuthError("Wrong password"));
                    }
                } else {
                    callback(new AuthError("Username does not exist"));

                }
            }
        ], callback);
    };




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






    function AuthError(message) {
        Error.apply(this, arguments);
        Error.captureStackTrace(this, AuthError);

        this.message = message;
    }

    util.inherits(AuthError, Error);

    AuthError.prototype.name = 'AuthError';

    exports.AuthError = AuthError;

我想知道的是,如果用户名应该是唯一的,那么用户将收到“notunique username”消息,那么用户注册路径是如何实现的。我是个编程新手

看来我找到了答案

这适用于用户模型:

        schema.pre("save",function(callback) {
        var self = this;
        async.waterfall([
            function(callback) {
                mongoose.models["User"].findOne({username : self.username}, callback);
            },
            function(user, callback) {
                if (user) {
                    callback(new AuthError("Wrong password"));

                } else {
                    callback();

                }
            }
        ], callback);


    });
这是一条注册路线:

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

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


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


User.authorize(username, password, function (err, user) {
    if (err) {
        if (err instanceof AuthError) {
            return next(new HttpError(403, err.message));

        } else {
            return next(err);
        };
    };
    req.session.user = user._id;
    res.send({});
});

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

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


var user = new User({username: username, password: password})
user.save(function (err, user) {
    if (err) {
        if (err instanceof AuthError) {
            return next(new HttpError(403, err.message));

        } else {
            return next(err);
        };
    };
    req.session.user = user._id;
    res.send({});
});

}您可以使用此代码注册:如果您有任何问题,请告诉我

var User = require('models/user');
app.post('/register',function(req,res){
    var username = req.body.username;
    var password = req.body.password;


    var user = new User({username: username, password: password})
 User.find({username: username},function(err,res){
    if (err) throw err;
    if(result != null)
     console.log("user exists");

    else
    {
      user.save(function (err, result) {
        if (err) throw err;
        console.log("show results: " + result);

      });
    }
 });
});