के साथ मेरे ऐप में "मुझे याद रखें" जोड़ने के लिए this जैसे लॉग इन करते समय मुझे "मुझे याद रखें" चेकबॉक्स की आवश्यकता है। और मैं पासपोर्टपासपोर्ट
app.use(function (req, res, next) {
if (req.method == 'POST' && req.url == '/login') {
if (req.body.rememberme) {
req.session.cookie.maxAge = 1000 * 60 * 3;
} else {
req.session.cookie.expires = false;
}
}
next();
});
app.use(passport.initialize());
app.use(passport.session());
का उपयोग कर रहा प्रवेश नहीं कर सकते जब req.body.rememberme
सच है और जब req.body.rememberme
गलत है उपयोगकर्ता याद किया जाता है से पहले एक मिडलवेयर जोड़ें। मैंने कनेक्ट-सुनिश्चित-लॉगिन का भी प्रयास किया और यह अभी भी गलत है।
और दूसरा प्रश्न: मुझे अपने डेटाबेस में कुकीज़ कब हटाएं और कैसे?
:)
अन्य कोड वास्तव में पासपोर्ट गाइड के रूप में एक ही है
मार्ग:
app.get('/', passport.authenticate('local', {failureRedirect: '/login'}), function (req, res) { res.redirect('/user/home'); });
app.post('/login', passport.authenticate('local', {failureRedirect: '/login'}), function (req, res) { res.redirect('/user/home'); });
सत्र:
passport.serializeUser(function(user, done) {
var CreateAccessToken = function() {
var token = user.GenerateSalt();
User.findOne({accessToken: token}, function(err, existingUser) {
if (err) return done(err);
if (existingUser) {
CreateAccessToken();
} else {
user.set('accessToken', token);
user.save(function(err) {
if (err) return done(err);
return done(null, user.get('accessToken'));
})
}
});
};
if (user._id)
CreateAccessToken();
});
passport.deserializeUser(function(token, done) {
User.findOne({accessToken: token}, function(err, user) {
if (err) return done(err);
return done(err, user);
});
});
और रणनीति:
passport.use(new LocalStrategy(function(userId, password, done) {
User.findOne().or([{username: userId}, {email: userId}]).exec(function(err, user) {
if (err) return done(err);
if (!user) {
return done(null, false, {message: 'Invalid password or username'});
}
if (user.Authenticate(password)) {
return done(null, user);
} else {
return done(null, false, {message: 'Invalid password or username'});
}
});
}));
मैंने देखा कि एक्सप्रेस केवल कुकी को अपडेट करेगा जब हैश मान बदल जाएगा। तो मैं मिडलवेयर
app.use(function (req, res, next) {
if (req.method == 'POST' && req.url == '/login') {
if (req.body.rememberme) {
req.session.cookie.maxAge = 1000 * 60 * 3;
req.session._garbage = Date();
req.session.touch();
} else {
req.session.cookie.expires = false;
}
}
next();
});
में संशोधित किया है अब मैं "मुझे याद रखें" के साथ प्रवेश कर सकते हैं, लेकिन यह केवल Ubuntu पर क्रोमियम और फ़ायरफ़ॉक्स पर काम करता है। मैं अभी भी Win7 और एंड्रॉइड पर क्रोम और फ़ायरफ़ॉक्स पर "मुझे याद रखें" चेकबॉक्स से लॉगिन नहीं कर सकता।
मैंने Win7 पर क्रोम पर "/ login" पर पोस्ट करते समय प्रतिक्रिया शीर्षलेख की जांच की और यह उसी "सेट-कुकी" फ़ील्ड के रूप में उबंटू पर था, यह क्यों काम नहीं कर सकता?
समय सिंक से बाहर है ... इसलिए मैं एक अतिरिक्त समय क्षेत्र पोस्ट करता हूं।
$('#login').ajaxForm({beforeSubmit: function(arr, $form, option) {
arr.push({name: '__time', value: (new Date()).toGMTString()});
}});
और "RememberMe" मिडलवेयर:
app.use(function (req, res, next) {
if (req.method == 'POST' && req.url == '/login') {
if (req.body.rememberme) {
req.session.cookie.maxAge = moment(req.body.__time).add('m', 3) - moment();
req.session._garbage = Date();
req.session.touch();
} else {
req.session.cookie.expires = false;
}
}
next();
});
यह गंभीर रूप से गलत नहीं है? यदि 'rememberme == true' का अर्थ है कि कुकी का समय समाप्त नहीं होना चाहिए?आपको अधिक कोड पोस्ट करना चाहिए क्योंकि आपको इन तीन मिडलवायर – pfried
से अधिक की आवश्यकता है यदि 'यादृच्छिक == सत्य' कुकी को समाप्त हो जाती है (इस मामले में 3 मिनट का), अन्यथा कुकी को सत्र कुकी बनने के लिए बनाया जाता है (ब्राउज़र की समयसीमा समाप्त हो जाती है) सत्र किया जाता है)। लेकिन मैं सहमत हूं: अधिक कोड की आवश्यकता है। – robertklep
यह कोड बहुत भ्रमित है। आपको चिंताओं को अलग करना चाहिए। 'Serialize' और' deserialize' फ़ंक्शंस उपयोगकर्ता को अपनी आईडी (डेटाबेस आईडी का उपयोग करके) प्राप्त करने के लिए और सत्र कुकी में क्रमबद्ध करने के लिए ऑनी हैं (यदि आप चिंता करते हैं तो आईडी स्पष्ट टेक्स्ट में नहीं होगी)। कुछ संदिग्ध सुरक्षा कोड में मिश्रण न करें – pfried