gpt4 book ai didi

node.js - 使用 expressjs mongoose passport-local 修改密码

转载 作者:搜寻专家 更新时间:2023-10-31 23:05:20 25 4
gpt4 key购买 nike

首先,我是法国人,我的英语不是很好,我尽力了:)

我使用 PassportJs、Mongoose 和 Expressjs (v3.x) 创建了本地身份验证。它工作得很好。当用户登录后,在/account/空间中,我创建了一个表单来更改当前密码(3 个输入:pass、newpass、newpassconfirm)。但是在那之后,我不知道如何处理......

我是否必须创建另一个通行证 LocalStrategy 才能找到我的用户并调用在我的用户架构中声明的“setPassword”函数?我可以在不使用 passportjs 的情况下执行此操作吗?如果可能,我怎样才能让我的用户访问数据库?

这是我的有效身份验证代码。

我的/login POST (/routes/user.js)

app.post('/login', function(req, res, next) {
passport.authenticate('local-login', function(err, user, info) {
if (err) {
return next(err);
}

if (!user) {
return res.redirect('/login');
}

req.logIn(user, function(err) {
if (err) {
return next(err);
}

req.session.pseudo = user.pseudo;
return res.redirect('/');
});
})(req, res, next);
});

我的护照脚本 (/script/passport.js)

passport.use('local-login', new LocalStrategy({
usernameField : 'pseudo',
passwordField : 'pass',
passReqToCallback : true // permet de passer l'objet req dans le callback
}, function (req, pseudo, pass, done) {
Users.findOne({ 'pseudo': pseudo }, function (err, user) {
if (err) {
return done(err);
}
if (!user) {
return done(null, false, req.flash('loginMessage', 'Cet utilisateur n\'existe pas.'));
}
if (!user.verifyPassword(pass)) {
return done(null, false, req.flash('loginMessage', 'Mot de passe incorrect.'));
}
return done(null, user);
});
}));

我的用户架构 (/models/db_Users.js)

var mongoose = require('mongoose');
var bcrypt = require('bcrypt-nodejs');

// Schema de la collection User
var usersSchema = mongoose.Schema({
pseudo: String,
pass: String,
admin: Boolean,
},
{
collection: 'Users'
});

usersSchema.methods.generateHash = function(password) {
return bcrypt.hashSync(password, bcrypt.genSaltSync(8), null);
};

usersSchema.methods.verifyPassword = function(password) {
return bcrypt.compareSync(password, this.pass);
};

module.exports = mongoose.model('Users', usersSchema);

我遇到问题的/changepass POST (/routes/users.js)

app.post('/changepass' , function (req, res, next) {
//console.log(req.body.pass, req.body.newpass, req.body.newpassconfirm);

// Should I call another passport LocalStrategy to acces to my User and set the new password here ?

res.redirect('/account');
});

如果您对我的应用程序的结构有疑问,您可以在这里找到所有项目:https://github.com/tibaldev/docu

感谢您的帮助!

最佳答案

/models/db_Users.js

// bcrypt middleware
usersSchema.pre('save', function(next){
var user = this;

//check if password is modified, else no need to do anything
if (!user.isModified('pass')) {
return next()
}

user.pass = bcrypt.hashSync(password, bcrypt.genSaltSync(8), null);
next()
})

在你的 routes/users.js 中

var User = require('mongoose').model('Users')

app.post('/changepass' , function (req, res, next) {
if (newpass !== newpassconfirm) {
throw new Error('password and confirm password do not match');
}

var user = req.user;

user.pass = newpass;

user.save(function(err){
if (err) { next(err) }
else {
res.redirect('/account');
}
})
});

关于node.js - 使用 expressjs mongoose passport-local 修改密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23968909/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com