Passport无法为本地身份验证添加参数

时间:2016-03-03 14:22:34

标签: express passport.js

我在本教程中使用护照本地身份验证: https://scotch.io/tutorials/easy-node-authentication-setup-and-local

它工作正常,但我不想在我的mongoldb数据库中为我的用户添加一些参数,比如他的第一个名字和姓氏。我无法弄清楚如何使用此功能,因为它是一个回调,我无法在done之后传递somme参数

    passport.use('local-signup', new LocalStrategy({
                // by default, local strategy uses username and password, we will override with email
                usernameField : 'email',
                passwordField : 'password',
                lastnameField : 'lastname', // here I added this field
                firstnameField : 'first name', // here I added this field
            },
            function(req, email, password, done) {

                // asynchronous
                // User.findOne wont fire unless data is sent back
                process.nextTick(function() {

                    // find a user whose email is the same as the forms email
                    // we are checking to see if the user trying to login already exists
                    User.findOne({ 'local.email' :  email }, function(err, user) {
                        // if there are any errors, return the error
                        if (err)
                            return done(err);

                        // check to see if theres already a user with that email
                        if (user) {
                            return done(null, false, req.flash('signupMessage', 'That email is already taken.'));
                        } else {

                            // if there is no user with that email
                            // create the user
                            var newUser            = new User();

                            // set the user's local credentials
                            newUser.local.email    = email;
                            newUser.local.password = newUser.generateHash(password);
// here I want to save my field :
                            newUser.local.lastname = lastname;
                            newUser.local.firstname = firstname;

                            // save the user
                            newUser.save(function(err) {
                                if (err)
                                    throw err;
                                return done(null, newUser);
                            });
                        }

                    });

                });
            }));

你能帮我吗?

1 个答案:

答案 0 :(得分:4)

这很简单,请尝试使用req.body.yourvariable,这是您的代码: 并添加passReqToCallback : true to the parameters.

passport.use('local-signup', new LocalStrategy({
            // by default, local strategy uses username and password, we will override with email
            usernameField : 'email',
            passwordField : 'password',
            passReqToCallback : true // allows us to pass back the entire request to the callback
        },
        function(req, email, password, done) {
            // asynchronous
            // User.findOne wont fire unless data is sent back
            process.nextTick(function() {

                // find a user whose email is the same as the forms email
                // we are checking to see if the user trying to login already exists
                User.findOne({ 'local.email' :  email }, function(err, user) {
                    // if there are any errors, return the error
                    if (err)
                        return done(err);

                    // check to see if theres already a user with that email
                    if (user) {
                        return done(null, false, req.flash('signupMessage', 'That email is already taken.'));
                    } else {

                        // if there is no user with that email
                        // create the user
                        var newUser            = new User();

                        // set the user's local credentials
                        newUser.local.email    = email;
                        newUser.local.password = newUser.generateHash(password);
                        newUser.local.lastname = req.body.lastname;
                        newUser.local.firstname = req.body.firstname;

                        // save the user
                        newUser.save(function(err) {
                            if (err)
                                throw err;
                            return done(null, newUser);
                        });
                    }

                });

            });
        }));