ユーザーオブジェクトを取得して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とユーザー配列を使用しました。
感謝をチェックしてくださいすることをここに仮定しています。これも試してみましたが、運はありませんでした。 –
@Ray_Hack –
には、この機能の使用方法を示すことができます。Doneの3番目のパラメータが追加されました。代わりにNextを使って試してみましたが、関数が最後にreturn next()を実行する前に、req.user = user [0]を手動で割り当てると動作させることができます。しかし、その明らかなことは正しい方法ではありませんか?ありがとう –