2016-07-16 25 views
2

Hier versuche ich Handy-Nummer in Benutzermodul zu überprüfen. Ich habe Token erstellt und an den Benutzer gesendet, aber wenn der Benutzer versucht, die Verwendung dieses bestimmten Tokens zu verifizieren, wurde "Passwort" und "Salz" automatisch geändert. Wie vermeide ich das? Irgend jemand helfen Sie mir .. ich hier nurWarum Password und Salt automatisch in MEAN STACK?

user.Mobileverification = 'verfied'; 
user.Mobileverificationcode = undefined; 
user.mobileVerificationExpires = undefined; 

Vor drei Variablen geändert wurde aktualisiert werden soll, aber ich weiß nicht, warum Passwort und Salz hat sich geändert?

Ich habe meine Routen unten angegeben:

app.route('/auth/mobilereset/:token').get(users.mobileresetResetToken); 
app.route('/auth/mobilereset/:token').post(users.mobilereset); 

Controller:

exports.mobileresetResetToken = function(req, res) { 
    User.findOne({ 
     Mobileverificationcode :req.params.token, 
     mobileVerificationExpires: { 
      $gt: Date.now() 
     } 
     // resetPasswordToken: req.params.token, 
     // resetPasswordExpires: { 
      // $gt: Date.now() 
     // } 
    }, function(err, user) { 
     if (!user) { 
      res.send({ 
       message: 'Invalid token' 
      }); 


     } else { 

      console.log('working fine'); 
     } 
    }); 
}; 



exports.mobilereset = function(req, res, next) { 


    async.waterfall([ 

     function(done) { 
      User.findOne({ 
       Mobileverificationcode: req.params.token, 
       mobileVerificationExpires: { 
        $gt: Date.now() 
       } 
      }, function(err, user) { 
       if (!err && user) { 

         user.Mobileverification = 'verfied'; 
         user.Mobileverificationcode = undefined; 
         user.mobileVerificationExpires = undefined; 

         user.save(function(err) { 
          if (err) { 
           return res.status(400).send({ 
            message: errorHandler.getErrorMessage(err) 
           }); 
          } else { 
           req.login(user, function(err) { 
            if (err) { 
             res.status(400).send(err); 
            } else { 
             // Return authenticated user 
             res.json(user); 

             done(err, user); 
            } 
           }); 
          } 
         }); 

       } else { 
        return res.status(400).send({ 
         message: 'reset token is invalid or has expired.' 
        }); 
       } 
      }); 
     }, 

    ], function(err) { 
     if (err) return next(err); 
    }); 
}; 

Modell:

var UserSchema = new Schema({ 

    username: { 
     type: String, 
     unique: 'testing error message', 
     required: 'Please fill in a username', 
     trim: true 
    }, 
    password: { 
     type: String, 
     default: '', 
     // validate: [validateLocalStrategyPassword, 'Password should be longer'] 
    }, 
    email: { 
     type: String, 
     trim: true, 
     default: '', 
     // validate: [validateLocalStrategyProperty, 'Please fill in your email'], 
     // match: [/.+\@.+\..+/, 'Please fill a valid email address'] 
    }, 
    Mobilenumber: { 
     type: String, 
     default: '' 
    }, 


    roles: { 
     type: [{ 
      type: String, 
      enum: ['user', 'admin'] 
     }], 
     default: ['user'] 
    }, 
    salt: { 
     type: String 
    }, 
    provider: { 
     type: String, 
     required: 'Provider is required' 
    }, 
    providerData: {}, 
    additionalProvidersData: {}, 

    updated: { 
     type: Date 
    }, 
    created: { 
     type: Date, 
     default: Date.now 
    }, 
    /* For reset password */ 
    Mobileverificationcode: { 
     type: String, 
    }, 
    mobileVerificationExpires: { 
     type: Date 
    }, 
    Mobileverification: { 
     type: String, 
     trim: true, 
     default: 'Not Verified', 
    }, 
    resetPasswordToken: { 
     type: String 
    }, 
    resetPasswordExpires: { 
     type: Date 
    } 
}); 

Antwort

0

Ich weiß nicht, ob Sie diese entfernt oder nicht, aber in MEAN .js Benutzermodell, müssen Sie mit dem folgenden Codeblock vorsichtig sein:

/** 
* Hook a pre save method to hash the password 
*/ 
UserSchema.pre('save', function (next) { 
    if (this.password && this.isModified('password')) { 
    this.salt = crypto.randomBytes(16).toString('base64'); 
    this.password = this.hashPassword(this.password); 
    } 

    next(); 
}); 

Welches wird direkt aufgerufen, bevor Sie die Benutzerdaten speichern. Das ist wahrscheinlich der Grund, warum sich Passwort und Salz ständig ändern ... Sie rufen user.save in mobile.reset() auf, und dieser Codeblock oben ist immer noch irgendwo vorhanden.

Update: Eine mögliche Art und Weise, es zu tun ist:

/** 
* Hook a pre save method to hash the password 
*/ 
UserSchema.pre('save', function (next) { 
    if(!this.isModified('Mobileverification') && !this.isModified('Mobileverificationcode') && !this.isModified('mobileVerificationExpires')) { 
     if (this.password && this.isModified('password')) { 
     this.salt = crypto.randomBytes(16).toString('base64'); 
     this.password = this.hashPassword(this.password); 
     } 
    } 

    next(); 
}); 

aber es könnte ein paar Anpassungen benötigen, wie zum Beispiel die Verbesserung dieser Haken vorge speichern Sie Ihre Bedürfnisse nach und Prüfung Passwort-Wechsel und mobilen Überprüfung, um festzustellen, ob nichts kaputt ist.

+0

ohne ändern salz und passwort wie kann ich nur ändern Mobileverificationcode, mobileVerificationExpires, Mobileverification –