2017-06-19 3 views
0

Ich erstelle eine Anwendung mit Knoten js. In dieser Anwendung habe ich bereits Benutzeranmeldung und Registrierung über Pass js abgeschlossen. Jetzt muss ich dem angemeldeten Benutzer Zugriff gewähren, um sein Passwort zu ändern. Also versuche ich dies auf meine eigene Weise zu tun, aber wenn ich diesen Prozess ausführe, wird das geänderte Passwort nicht aktualisiert und im Mungo-Dokument des angemeldeten Benutzers gespeichert. Ich werde den Code bereitstellen, den ich für diesen Prozess verwendet habe. Also bitte ich euch, Leute, lasst mich bitte wissen, wie ich das mit meinem Programm machen kann.Knoten js Pass js Benutzerpasswort ändern

Dies ist meine POST-Route für das Passwort ändern.

app.post('/changePass/:hash', isLoggedIn, function(req, res){ 
    cph.findOne({hash: req.params.hash}).populate('userId', "local.password -_id").exec(function(err, hash){ 
     if(err) throw err; 
     if(validator.isEmpty(req.body.currentPassword) || validator.isEmpty(req.body.newPassword) || validator.isEmpty(req.body.confirmPassword)){ 
      res.render('admin/settings/pages/cup/cpf', { 
       user: req.user, 
       message: 'Fields must be required', 
       data: hash 
      }); 
     } 
     else { 
      if(!bcrypt.compareSync(req.body.currentPassword, hash.userId.local.password)){ 
       res.render('admin/settings/pages/cup/cpf', { 
        user: req.user, 
        message: 'Current password is incurrect', 
        data: hash 
       }); 
      } 
      else { 
       if(req.body.newPassword != req.body.confirmPassword){ 
        res.render('admin/settings/pages/cup/cpf', { 
         user: req.user, 
         message: 'New password and confirm password do not match', 
         data: hash 
        }); 
       } 
       else { 
        cph.update({$set:{'userId.local.password': bcrypt.hashSync(req.body.confirmPassword, bcrypt.genSaltSync(8), null)}}, function(){ 
         console.log('Success') 
        }); 
       } 
      } 
     } 
    }); 
}); 

Dies ist die Mungo Sammlung, die ein Hash-Erstellung des Passwort als kombinierte Link zur angemeldeten Benutzer E-Mail Senden zu ändern.

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

var cpHashSchema = Schema({ 
    userId: { 
     type: Schema.ObjectId, 
     ref: 'users' 
    }, 
    hash: { 
     type: String 
    } 
}); 

module.exports = mongoose.model('changepasswordHash', cpHashSchema); 

Dies ist die

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

var userSchema = Schema({ 
    active: { 
     type: Boolean, 
     default: false 
    }, 
    first: { 
     type: String 
    }, 
    last: { 
     type: String 
    }, 
    email: { 
     type: String 
    }, 
    local: { 
     username: { 
      type: String 
     }, 
     password: { 
      type: String 
     } 
    }, 
    joined: { 
     type: Date, 
     default: Date.now 
    }, 
    usertype: { 
     type: String, 
     default: 'user' 
    } 
}); 

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); 
}; 

module.exports = mongoose.model('users', userSchema); 

Diese Sammlung des Benutzers sind der Quellcode, dass ich diese Anwendung bauen bin mit. Also Leute, bitte hilf mir diesen Antrag zu vervollständigen.

danke

Antwort

1

Zunächst einmal - Sie changepasswordHash Sammlung mit Feldern aus einer anderen Tabelle zu aktualisieren versuchen. MongoDB konnte verwandte Datensätze nicht aktualisieren.

Sie haben wie users Sammlung mit userId etwas zu aktualisieren:

users.update({_id: hash.userId._id}, {$set: {'local.password': newPass}}, callbackHere) 
+0

in diesem users.update (. {_ Id: hash.userId._id} Objekt‘, was es tun soll, bitte erklären, um es mehr Bit –

+0

Es hat funktioniert, danke –

+1

Mongoose Laden Sie Ihren Benutzer als 2. Abfrage an Benutzer Sammlung und dann fügen Sie es in Hash-Objekt.So haben Sie alle Felder von Benutzer Sammlung in 'hash.userId' -Eigenschaft.Beinhaltet Ihre' _id' und andere Requisiten. –