I am working on a node+passport.js authentication. I make a simple login/signup app. It's working fine but, it stores only username and password.
How can I store the other Form Fields like Phone number, email, hobbies, gender into database through a signup.html page with working login passport authentication? Can anybody have solution for that so I can store all the fields in the database....
//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;
In this code I use schema of email, username, password, gender phone and also given fields in signup.html page. but it stores only username and password fields only.........
Open passport.js file ( gernally inside config folder)
find this line of code.
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
}));
Add option passReqToCallback
and you can access all request body data from req.body
:
passport.use(new LocalStrategy({
passReqToCallback: true
}, function (req, username, password, cb) {
// Form fields are in req.body if using body-parser
// ...
});
We can also try in this way.Its working in right way.In passport.js
file write below code :
module.exports = function(passport) {
var criteria;
passport.use(
new LocalStrategy({ usernameField: 'username' }, (username, password, done) => {
if(username.indexOf('@') > -1) {
criteria = {
email: username,
};
} else {
criteria = {
mobile: username,
};
}
// Match user
User.findOne(criteria).then(user => {
if (!user) {
return done(null, false, {
success: null,
errors: "User is not registered",
result:null
});
}
// Match password
bcrypt.compare(password, user.password, (err, isMatch) => {
if (err) throw err;
if (isMatch) {
return done(null, user);
} else {
return done(null, false, {
success: null,
errors:'Password incorrect',
result: null
});
}
});
});
})
);
enter code herepassport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
done(err, user);
});
});
};