2
我需要編寫普通的代碼來檢查通過表單提交的當前用戶密碼值,以查看它是否與數據庫中的現有密碼匹配,以及如果是,請將密碼更新爲通過同一表單提交的新密碼值。如何檢查當前密碼和(如果正確)使用Passport.js本地策略更新密碼
但是,我找不到任何使用Passport.js的方法。任何人都可以建議我如何在下面的用戶控制器中執行此操作,如果有護照提供的任何幫助函數用於此目的,以及如何使用哈希和密碼來執行此操作?
這裏是我的代碼:
// Form Submitted
req.body = {
_id: '5294198b7b35ad2794000001',
email: '[email protected]',
name: 'John Smith',
provider: 'local',
username: 'ab123',
current_password: 'currentpassword',
new_password: 'newpassword'
}
// Route
app.put('/users/me', users.update);
// Controller
var mongoose = require('mongoose'),
User = mongoose.model('User'),
_ = require('underscore'),
passport = require('passport'),
LocalStrategy = require('passport-local').Strategy;
exports.update = function(req, res) {
var user = req.user
user = _.extend(user, req.body);
user.save(function(err) {
if(err) { console.log(err) };
res.jsonp(user);
});
};
// Passport Config File
module.exports = function(passport) {
//Serialize sessions
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
User.findOne({
_id: id
}, function(err, user) {
done(err, user);
});
});
//Use local strategy
passport.use(new LocalStrategy({
usernameField: 'email',
passwordField: 'password'
},
function(email, password, done) {
User.findOne({
email: email
}, function(err, user) {
if (err) {
return done(err);
}
if (!user) {
return done(null, false, {
message: 'Unknown user'
});
}
if (!user.authenticate(password)) {
return done(null, false, {
message: 'Invalid password'
});
}
return done(null, user);
});
}
));
};
謝謝,這工作:) – ac360