2017-10-05 9 views
-1

ユーザーパスワード(bcryptでハッシュ)を更新するだけのアプリケーションでは、パスワードを忘れた機能を作成しています。しかし、私はこれまでに持っているコードをユーザが存在しないかどうかをどのように表示するのか分かりません。私はそれを記録する方法を知っていて、成功のためにはreq.flashに精通していますが、ユーザーが存在しない場合、req.flashに設定する条件はわかりません。ここでユーザーが表示されないようにする方法

は私のコードです:

ルート/ユーザー:

var express = require('express'); 
var router = express.Router(); 
var passport = require('passport'); 
var LocalStrategy = require('passport-local').Strategy; 

var User = require('../models/user'); 

router.post('/forgot', function(req, res){ 
    var username = req.body.username; 
    var password = req.body.password; 
    var password2 = req.body.password2; 

    // Validation 
    req.checkBody('username', 'Username is required').notEmpty(); 
    req.checkBody('password', 'Password is required').notEmpty(); 
    req.checkBody('password2', 'Passwords do not match').equals(req.body.password); 

    var errors = req.validationErrors(); 

    if(errors){ 
     res.render('forgot',{ 
      errors:errors 
     }); 
    } 
    else { 
     User.changePassword(username, password); 
     req.flash('success_msg', 'Your password has been reset. Please login.'); 
     res.redirect('/users/login'); 
     } 
}); 

module.exports = router; 

user.jsの:

module.exports.changePassword = function(username, newPassword, callback) { 
    var query = {username: username}; 
    User.findOne(query, function (err, userToChange, callback){ 
     if (err) { 
      throw err; 
     } 
     if (userToChange) { 
      bcrypt.genSalt(10, function(err, salt) { 
        bcrypt.hash(newPassword, salt, function(err, hash) { 
          userToChange.password = hash; 
          userToChange.save(callback); 
        }); 
      }); 
     } 
     else{ 
      console.log('NO USER'); 
      return req.flash('error_msg', 'User not found'); 
     } 
    }); 
} 

ユーザーならば、私は私のUser.changepasswordからブール変数を返すようにしようとしましたこれらのブール値を使ってルートページに条件を設定しますが、返すものはすべて定義されていません。手伝ってくれませんか?

答えて

-1

あなたは非同期アクションを誤解していますが、ここではコードを同期的に記述することは想定されていません。ユーザーが見つからないときにエラーメッセージを送信する必要がある場合は、そのコードをコールバックのUser.findOne()に入れる必要があります。あなたuser.jsので

、あなたはこのような何かエクスポートする必要があります。

module.exports.changePassword = (req, res)=>{ 
    //... 
    User.findOne(query, (err, user)=>{ 
     if(err){ 
      res.send(err.message); 
     }else{ 
      //Do other stuffs as the user is found. 
     } 
    }); 
}; 

をそして、あなたルート/ユーザーに、ちょうど行います

User.changePassword(req, res); 

をそれは非常に良いではありませんが、それでも解決できますあなたの問題は、プロミスをお勧めします。プロミスは、非同期操作の方が便利です。

+0

ok私はちょうど編集を見ました、ありがとうございます –

+0

どこでユーザー名とパスワードを渡すのですか? –

+0

最初の行を 'module.exports.changePassword =(username、password、password2、req、res)=> {' –

関連する問題