Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.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
Node.js passportjs用户对象不返回比较密码的密码_Node.js_Mongodb_Express_Mongoose_Passport.js - Fatal编程技术网

Node.js passportjs用户对象不返回比较密码的密码

Node.js passportjs用户对象不返回比较密码的密码,node.js,mongodb,express,mongoose,passport.js,Node.js,Mongodb,Express,Mongoose,Passport.js,我有一个问题,我不明白为什么用户存储的对象在model/user.js中的validatePassword函数中不返回密码。我遵循passportjs官方文档中描述的所有步骤 我使用passportjs的localstategy进行登录。当我比较电子邮件时,它总是比较,但当我尝试执行validate password并使用this.password或作为参数时,它总是为空,这就是为什么我的密码不是比较 我得到了所有的用户模式信息,但我没有在用户对象中得到密码,所以我无法比较它 谁能告诉我如何摆脱

我有一个问题,我不明白为什么用户存储的对象在model/user.js中的validatePassword函数中不返回密码。我遵循passportjs官方文档中描述的所有步骤

我使用passportjs的localstategy进行登录。当我比较电子邮件时,它总是比较,但当我尝试执行validate password并使用this.password或作为参数时,它总是为空,这就是为什么我的密码不是比较

我得到了所有的用户模式信息,但我没有在用户对象中得到密码,所以我无法比较它

谁能告诉我如何摆脱这个问题

控制台日志

routes/user.js


经过两个小时的努力,我找到了问题的答案。在我的用户模型密码字段中,我设置了属性“select:false”,因为我总是将密码设置为空

老年人:

var userSchema = new Schema({
      password: {
            type: String, // Password
            required: true,
            select: false
        },
}
重新设置后,选择:true,工作正常

更新:

var userSchema = new Schema({
      password: {
            type: String, // Password
            required: true,
            select: true
        },
}

看起来像这样。您传递给bcrypt.compare()的密码未定义。检查它指的是什么,以及这个.password是什么。我没有尝试过任何系统,我已经包含了所有必需的模块。基本问题是,当我尝试比较密码时,用户模式密码字段返回空。
    var express = require('express');
    var router = express.Router();
    var bcrypt = require("bcryptjs")
    var User = require('../models/user');
    var UserProfile = require('../models/userProfile');
    var UserSignupToken = require('../models/userSignupToken.js');
    var IpLogger = require('../models/ipLogger.js');
    var passport = require("passport");
    var localStrategy = require("passport-local"), Startegy;

    router
            .route('/api/user/register')
            .post(
                    function (req, res, next) {

                        var user_, userData_;
                        userData_ = {
                            link_id: req.body.manLinkId,
                            nick_name: req.body.txtNickname,
                            email: req.body.txtEmail,
                            password: req.body.manPassword,
                            user_type: req.body.manUserType,
                            is_active: req.body.manIsActive,
                            is_close: req.body.manIsClose,
                            is_online: req.body.manIsOnline
                        };

                        user_ = new User(userData_);

                        user_.validate(function (err) {
                            if (err) {

                            } else {
                                //check recaptch is validate or not
                                var request = require('request');
                                request
                                        .post({
                                            url: 'http://www.google.com/recaptcha/api/verify',
                                            form: {
                                                privatekey: process.env.RECAPTCHA_PRIVATE_KEY,
                                                remoteip: req.connection.remoteAddress,
                                                challenge: req.body.captcha.challenge,
                                                response: req.body.captcha.response
                                            }
                                        }, function (err, httpResponse, body) {
                                            if (body.match(/false/) === null) {
                                                //Recaptcha validated
                                                User.createUser(user_, function (err, data) {
                                                    if (err) {
                                                        console.log("stpe 1:");
                                                        console.log(err);
                                                        res.json({status: 0, message: 'User having an error on stage 1'});
                                                    } else {
                                                        res.locals.user = data;
                                                        //res.json({error:1, message: 'User saved'});
                                                        next();
                                                    }
                                                });
                                                //res.json({ "captchaError": true });
                                            } else {
                                                res.json({"captchaError": false});
                                            }
                                        });
                            }
                        });
                    },
                    function (req, res, next) {
                        var userProfileData_, userProfile_;
                        userProfileData_ = {
                            user_id: res.locals.user.id,
                            link_id: res.locals.user.link_id,
                            full_name: req.body.txtFullname,
                            is_active: -1
                        };
                        userProfile_ = new UserProfile(userProfileData_);
                        userProfile_.save(function (err, data) {
                            if (err) {
                                console.log("stpe 2:");
                                console.log(err);
                                res.json({status: 0, message: 'User having an error on stage 2'});
                            } else {
                                //res.json({error:1, message: 'User profile generated'});
                                next();
                            }
                        });
                    },
                    function (req, res, next) {
                        var userSignupTokenData_, userSignupToken_;
                        userSignupTokenData_ = {
                            user_id: res.locals.user.id,
                            link_id: res.locals.user.link_id,
                            is_active: -1
                        };
                        userSignupToken_ = new UserSignupToken(userSignupTokenData_);
                        userSignupToken_.save(function (err, data) {
                            if (err) {
                                console.log("stpe 3:");
                                console.log(err);
                                res.json({status: 0, message: 'User having an error on stage 3'});
                            } else {
                                //res.json({error:1, message: 'User signup token generated'});
                                next();
                            }
                        });
                    },
                    function (req, res, next) {
                        var ipLoggerData_, ipLogger_, client_IP;
                        ipLoggerData_ = {
                            user_id: res.locals.user.id,
                            link_id: res.locals.user.link_id,
                            client_ip: req.ip,
                            activity: "signup"
                        };
                        ipLogger_ = new IpLogger(ipLoggerData_);
                        ipLogger_.save(function (err, data) {
                            if (err) {
                                console.log("stpe 4:");
                                console.log(err);
                                res.json({status: 0, message: 'User having an error on stage 4'});
                            } else {
                                res.json({status: 1, message: 'user saved'});
                            }
                        });
                    }
            );
    //Check unique validation
    router
            .route('/api/user/authenticate')
            .post(
                    function (req, res, next) {
                        console.log("---- User Information ----");
                        console.log(req.body.txtSigninEmail);
                        console.log(req.body.txtSigninPassword);

                        passport.authenticate('local', function (err, user, info) {
                            console.log(info);
                            if (err) {
                                console.log(err);
                                return next(err);
                            }
                            if (!user) {
                                console.log("not user:");
                                console.log(user);
                                return res.status(401).json({
                                    err: info
                                });
                            }
                            req.login(user, function (err) {
                                if (err) {
                                    return res.status(500).json({
                                        err: 'could not login user'
                                    });
                                }
                                res.status(200).json({
                                    status: 'login successful'
                                });
                            });
                        })(req, res, next);
                    });
    router
            .route('/api/user/checkEmail')
            .post(
                    function (req, res) {
                        User.count({email: req.body.txtSigninPassword}, function (err, user) {
                            if (err) {
                                // console.log("error false");
                                res.json(false);
                            } else {
                                // console.log("data");
                                // console.log(user);
                                res.json({"status": user > 0 ? false : true});
                            }
                        });
                    });


    passport.serializeUser(function (user, done) {
        done(null, user.id);
    });

    passport.deserializeUser(function (id, done) {
        User.findById(id, function (err, user) {
            done(err, user);
        });
    });


    passport.use('local', new localStrategy(
            {
                usernameField: 'txtSigninEmail',
                passwordField: 'txtSigninPassword'
            },
            function (username, password, done) {
                User.findOne({email: username}, function (err, user) {
                    if (err) {
                        return done(err);
                    }
                    if (!user) {
                        return done(null, false, {message: 'Incorrect username.'});
                    }
                    if (!user.validPassword(password)) {
                        return done(null, false, {message: 'Incorrect password.'});
                    }
                    return done(null, user);
                });
            }
    ));
    module.exports = router;
var userSchema = new Schema({
      password: {
            type: String, // Password
            required: true,
            select: false
        },
}
var userSchema = new Schema({
      password: {
            type: String, // Password
            required: true,
            select: true
        },
}