यहां मेरे लिए क्या काम किया गया है, यह समाधान एक मोंगोस आधारित ओडीएम पर आधारित है, पहला भाग पासपोर्ट से संबंधित हिस्सा है, मैंने उपयोगकर्ता को ओडीएम से भी जोड़ा है, जिससे पासवर्ड की एन्क्रिप्शन कैसे की जाती है।
यदि मैं आपका प्रश्न समझ गया, तो आप चाहते हैं कि उपयोगकर्ता या तो उसका ईमेल या पासवर्ड टाइप करें। इस मामले में, दोनों उपयोगकर्ता को खोजने के लिए खोज को संशोधित करें, यानी उपयोगकर्ता नाम या पासवर्ड के साथ खोजने के लिए अपने कॉल में (0)।
ध्यान दें कि मैं स्पष्ट पासवर्ड संग्रहीत करने से बचने के लिए bcrypt का उपयोग करता हूं , यही कारण है कि पासवर्ड का परीक्षण करने के लिए एक अनुकूलित तुलना विधि भी है। Google ऑथ का उपयोग करने के 'संकेत' को भी ध्यान दें, मेरा सिस्टम दोनों सक्षम है, यदि यह प्रासंगिक है, तो कृपया मुझे पता करें और मैं आवश्यक कोड जोड़ सकता हूं।
------------ प्रमाणीकरण हिस्सा (सिर्फ प्रासंगिक स्निपेट) -----------
var passport = require('passport'),
LocalStrategy = require('passport-local').Strategy;
passport.serializeUser(function(user, done) {
// the values returned here will be used to deserializeUser
// this can be use for further logins
done(null, {username: user.username, _id: user.id, role: user.role});
});
passport.deserializeUser(function(user, done) {
done(null, user);
});
passport.use(new LocalStrategy(function(username, password, done){
odm.User.findOne({username: username, authType: 'direct'}, function(err, user){
if(err){
return done(err, false);
}
if(!user){
return done(null, false);
}
if(user.role === 'new'){
console.log('can not use new user!');
return done('user not activated yet, please contact admin', false);
}
user.comparePassword(password,function(err, isMatch){
if(err){
return done(err, false);
}
if(isMatch){
return done(null, user);//{username: username});
}
return done(null, false);
});
});
}));
app.post('/login', function(req, res, next){
passport.authenticate('local', {
failureRedirect: '/logout?status=login failed'
}, function(err, user, info){
if(err){
return next(err);
}
if(!user){
return res.redirect('/login');
}
req.logIn(user, function(err){
if (req.body.rememberme) {
req.session.cookie.maxAge = 30*24*60*60*1000 ;//Rememeber 'me' for 30 days
} else {
req.session.cookie.expires = false;
}
var redirect = req.param('redirect') || '/index';
res.redirect(redirect);
});
}
)(req, res, next);
}
);
app.post('/register',function(req, res){
var user = new odm.User({username: req.body.username, password: req.body.password, email: req.body.email, authType: 'direct'});
user.save(function(err, user){
if(err){
console.log('registration err: ' , err);
} else {
res.redirect('/list');
}
});
});
--- उपयोगकर्ता/ODM, प्रासंगिक भागों ---- ------------
var bcrypt = require('bcrypt-nodejs');
// --------------------- User ------------------------------------------ //
var userSchema = new Schema({
name: String,
email: String,
username: {type: String, required: true, unique: true},
password: String,
role: {type: String, required: true, enum: ['new', 'admin', 'user'], default: 'new'},
authType: {type: String, enum: ['google', 'direct'], required: true}
});
userSchema.pre('save', function (next) {
var user = this;
if (!user.isModified('password')) return next();
console.log('making hash...........');
bcrypt.genSalt(SALT_WORK_FACTOR, function (err, salt) {
if (err) return next(err);
bcrypt.hash(user.password, salt, null, function (err, hash) {
if (err) return next(err);
user.password = hash;
next();
});
});
});
userSchema.methods.comparePassword = function (candidatePassword, cb) {
bcrypt.compare(candidatePassword, this.password, function (err, isMatch) {
if (err) return cb(err);
cb(null, isMatch);
});
};
क्यों downvote? – Forivin
आपको शायद अपनी खुद की रणनीति बनाना होगा, लेकिन आप आसानी से पहले से ही बनाई गई रणनीतियों को इस https: // github जैसे ढूंढ सकते हैं।com/zkochan/passport-email – mfreitas
पासवर्ड अप्रचलित है, आप मूल रूप से उपयोगकर्ता को अपनी साइट के लिए इंटरनेट पर 100 वां पासवर्ड याद रखने के लिए कहते हैं, और वे दूसरी बार दूसरी साइट पर जाते हैं, पासपोर्ट या किसी भी एक्सप्रेस के बारे में बहुत कुछ लेख मध्यवर्ती एक ही रणनीति ईमेल/पासवर्ड या नाम/पासवर्ड का उपयोग करते हैं, आप लॉगिन/त्रुटि लॉगिन/पासवर्ड भूलने के लिए बस अधिक bloated कोड लिखेंगे। या तो एफबी/Google ऑथ एपीआई का उपयोग करें या आप https://github.com/florianheinemann/passwordless – syarul