如何使用passport-local.js存储其他表单字段

Roh*_*ant 4 node.js passport.js

我正在进行节点+ passport.js身份验证.我做了一个简单的登录/注册应用程序.它工作正常,但它只存储用户名和密码.

如何通过带有工作登录护照身份验证的signup.html页面将其他表单字段(如电话号码,电子邮件,爱好,性别)存储到数据库中?任何人都可以有解决方案,所以我可以存储数据库中的所有字段....

//my schema is :--
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var userSchema = mongoose.Schema({
    local            : {
        username     : String,
        gender       : String,
        phone        : String,
        email        : String,
        password     : String
    }
 });
userSchema.methods.generateHash = function(password) {
    return bcrypt.hashSync(password, bcrypt.genSaltSync(8), null);
};
userSchema.methods.validPassword = function(password) {
    return bcrypt.compareSync(password, this.local.password);
};


var User = mongoose.model('user', userSchema);

module.exports = User;
Run Code Online (Sandbox Code Playgroud)

在此代码中,我使用电子邮件,用户名,密码,性别电话的架构以及signup.html页面中的字段.但它只存储用户名和密码字段.........

Shu*_*tra 6

打开passport.js文件(gernally在config文件夹中)

找到这行代码.

    passport.use('local-signup', new LocalStrategy({   // 'login-signup' is optional here   
    usernameField : 'email',
    passwordField : 'password',        
    passReqToCallback : true },function(req, email, password, done) {
   var gender = req.body.gender;
  var username = req.body.username;
  var phone = req.body.phone;
 // Now you can access gender username and phone

}));
Run Code Online (Sandbox Code Playgroud)


ves*_*sse 0

添加选项passReqToCallback,您可以从以下位置访问所有请求正文数据req.body

passport.use(new LocalStrategy({ 
  passReqToCallback: true 
}, function (req, username, password, cb) {
  // Form fields are in req.body if using body-parser
  // ...
});
Run Code Online (Sandbox Code Playgroud)