2016-05-31 3 views
0

ユーザーオブジェクトを取得してreq.userに投稿する方法を理解するのは難しいです。Node.jsコールバックでユーザーを返してページにレンダリング

これはパスワードリセットページのためのもので、ユーザーは電子メールを入力し、トークン付きのリセットリンクを電子メールで送信し、トークン+有効期限をテーブルに入力します。ユーザーがリンクをクリックすると - 私のルートで

を私が持っている:resetpwdが返されたとき

router.get('/:token',resetpwd, getReset); 

その後、その後getResetは、次のコード

module.exports = function (req, res, next) { 
var content = { 
    title: 'password reset | title', 
    user: req.user, 
    customCSS: [], 
    customJS: [] 
    //message:req.flash() 
}; 

res.render('reset', content); 

resetpwdを経由して、私のレンダリングとデータの受け渡しを扱います次のコードを持っています

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

module.exports = function(req, done) { 
User.findAll({ 
    where: { 
     resetPasswordToken: req.params.token, 
     resetPasswordExpires: { $gt: Date.now() } //$gt = greater than 
    } 
}).then(function(user) { 

    console.log(user[0]); 

    if (user[0] === undefined) { 
     console.log('No User found , redirecting to forgot page'); 
     req.flash('error', 'Password reset token is invalid or has expired.'); 
     return res.redirect('/forgot'); 
    } 
    console.log('found user, return callback') 
    return done(null, user[0]); 


}, function(err) { 
    console.log('error here?'); 
    // return done(err, null); 
    //error handle this 
}); 

}; 

pa sswordコードが無効か、期限切れです。すべてが有効であれば、「doneは関数ではありません」というエラーが表示されます。または、doneを使用せずに書き換えた場合(以下のように)、コンソールログでハングしますがエラーはありません。

module.exports = function(req, res) { 

//-same as previous- 

    console.log('found user, return it') 
    return (null, user[0]); 

//same as previous 

}; 

req.userを返すと、私のgetResetに渡す正しい方法は何ですか。 注:FindAneまたはmssql2008で作業していないオフセットで、mssqlを使用して続行する必要があるため、FindAllとユーザー配列を使用しました。

答えて

0

@Ray_Hack私はこの関数の3パラメータが、私はあなたがresパラメータを逃すと思うし、あなたが取得する場所、それはまた、そこ

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

module.exports = function(req,res,done) { 
User.findAll({ 
    where: { 
     resetPasswordToken: req.params.token, 
     resetPasswordExpires: { $gt: Date.now() } //$gt = greater than 
    } 
}).then(function(user) { 

    console.log(user[0]); 

    if (user[0] === undefined) { 
     console.log('No User found , redirecting to forgot page'); 
     req.flash('error', 'Password reset token is invalid or has expired.'); 
     return res.redirect('/forgot'); 
    } 
       console.log('found user, return callback') 
       return done(null, user[0]); 


}, function(err) { 
    console.log('error here?'); 
    // return done(err, null); 
    //error handle this 
}); 

}; 
+0

感謝をチェックしてくださいすることをここに仮定しています。これも試してみましたが、運はありませんでした。 –

+0

@Ray_Hack –

+0

には、この機能の使用方法を示すことができます。Doneの3番目のパラメータが追加されました。代わりにNextを使って試してみましたが、関数が最後にreturn next()を実行する前に、req.user = user [0]を手動で割り当てると動作させることができます。しかし、その明らかなことは正しい方法ではありませんか?ありがとう –

関連する問題