2015-10-20 19 views
0
app.post('/reset/:token', function(req, res) { 
    async.waterfall([ 
    function(done) { 
     User.findOne({ 'local.resetPasswordToken' : req.params.token, 'local.resetPasswordExpires' : { $gt: Date.now() } }, function(err, user) { 
     if (!user) { 
      req.flash('resetMessage', req.params.token); 
      return res.redirect('back'); 
     } 
    ], function(err) { 
    res.redirect('/'); 
    }); 
}); 

app.get('/reset/:token', function(req, res) { 
    User.findOne({ 'local.resetPasswordToken': req.params.token, 'local.resetPasswordExpires' : { $gt: Date.now() } }, function(err, user) { 
     if (!user) { 
      req.flash('forgotMessage', req.params.token); 
     return res.redirect('/forgot'); 
     } 
     res.render('reset.ejs', { user: req.user, message: req.flash('resetMessage') }); 
    }); 
}); 



<!--Reset.ejs page ResetPassword FORM --> 
<form action="/reset/:token" method="post"> 
    <div class="form-group"> 
     <label>New Password</label> 
     <input type="text" class="form-control" name="newpassword"> 
    </div> 
    <div class="form-group"> 
     <label>Confirm Password</label> 
     <input type="text" class="form-control" name="confirmpassword"> 
    </div> 
    <button type="submit" class="btn btn-warning btn-lg">Reset</button> 
</form> 

我能夠得到與req.params.token標記爲「後」點擊 http://localhost:8080/reset/fed831abf73150c96f6a3e392b5cbdcaccdeb9bd沒有的NodeJS能夠得到req.params.token令牌值

後來後,當我通過提交reset.ejs爲「get」,我無法通過req.params.token檢索任何標記值。

它的任何解決方案?

+0

您不會將實際標記傳遞到表單操作。 –

+0

表單動作使用「/ reset /:token」,但我希望Tedd在這裏填寫實際的標記,而不是「:token」。 – xaviert

+0

我無法弄清楚我應該如何編寫它才能填充它。 –

回答

0

你需要另一種形式method='get'action='reset/' + tokenvar。此外,您的異步瀑布不會調用done(),因此如果用戶存在,則不會調用重定向。

+0

謝謝。我修好了它。 –

0

我想這個原始代碼可能來自http://sahatyalkabov.com/how-to-implement-password-reset-in-nodejs/。在此嘖嘖玉模板引擎使用,如果你看一下reset.jade你會看到,它開始與

形式(方法=「POST」)

,但沒有定義動作。我真的不知道翡翠但在你的例子中,你正在使用EJS並在代碼中你設置操作

形式行動=「/ RESET /:令牌」的方法=「郵報」

和大家指出你發佈的路線正是/重置/:令牌。所以req.params將是:令牌和重置將失敗。你需要做的是完全按照它在get請求中顯示的方式發佈url。如果你讀

Is it a good practice to use an empty URL for a HTML form's action attribute? (action="")

你可以看到,你可以修改你的reset.ejs頁面的代碼讀取

形式行動=「」方法=「郵報」

現在的職位應具備一個動作等於獲取的URL與令牌到位和重置應該發生。