2017-10-31 11 views
0

ログイン後に「edit user route」ページにリダイレクトしようとしていますが、req.user._idが未定義で表示されています。sucessRedirectでpassport.js 'user'が定義されていません

ログインルータ

router.post('/login', (req, res, next) => { 
    passport.authenticate('local', { 
     successRedirect:'../profiles/edit/' + req.user._id, <<<< **UNDEFINED** 
     failureRedirect:'./login', 
     failureFlash: true, 
    })(req, res, next); 
}); 

passport.js

module.exports = function(passport) { 
passport.use(new LocalStrategy({ 
    }, 
    (username, password, done) => { 
    Profile.findOne({ 
     username:username 
    }).then(user => { 
     if(!user) { 
     return done(null, false, {message: 'No user found'}); 
     } 
     bcrypt.compare(password, user.password, (err, isMatch) => { 
     if (err) throw err; 
     if (isMatch) { 
      return done(null, user); 
     } else { 
      return done(null, false, {message: 'Password Incorrect'}); 
     } 
     }) 
    }) 
    } 
)); 

passport.serializeUser(function(user, done) { 
    done(null, user.id); 
}); 

passport.deserializeUser(function(id, done) { 
    Profile.findById(id, function(err, user) { 
    done(err, user); 
    }); 
});  
} 

app.js

app.use(session({ 
secret: 'secret', 
resave: true, 
saveUninitialized: true, 
    })); 

app.use(passport.initialize()); 
app.use(passport.session()); 

私が取得しています:

TypeError: Cannot read property '_id' of undefined

答えて

0

あなたはauthenticateメソッドでは、ユーザの詳細情報を取得することはできません、それはユーザ名が発見されているかどうかを確認し、次のミドルウェア

app.post('/login', 
    passport.authenticate('local', { failureRedirect: '/login' }), 
    function(req, res) { 
     // here you can access user info 
     res.redirect('../profiles/edit/' + req.user._id); 
}); 
+0

に渡します今私は理解して、どうもありがとう。 ) – Teresha

+0

私の答えがあなたのために働くなら、助けてくれてうれしいです。それをあなたの最善の答えとして受け入れることができます。また、stackoverflowの仕組みを知るために[ツアー](https://stackoverflow.com/tour) – YouneL

関連する問題