2017-04-06 100 views
1

我是Node.js中的新手,並使用passport-local策略進行登錄會話。我已經在我的網絡應用程序中設置了所有內容,但會話時遇到了很大的問題。護照在Node.js中使用快遞的本地策略會話

我試過多個用戶可以同時登錄到我的網絡應用程序,但是有一個問題。其中一個用戶(例如用戶名是Paul)首先登錄,然後另一個用戶(Chris)登錄,然後Paul對我的Web應用程序的看法更改爲Chris的視圖。

我不知道你們明白我的意思是說,但這裏是我在Node.js的

app.get('/location', isLoggedIn, function(req, res){ 
    var user_temp = {user: ''}; 
    user_temp.user = global_username; 
    res.render('location/index1', user_temp); 
}); 

而下面的代碼代碼之一是護照本地策略

var LocalStrategy = require('passport-local').Strategy; 
passport.use('local-login', 
    new LocalStrategy({ 
     usernameField : 'email', 
     passwordField : 'password', 
     passReqToCallback : true 
    }, 
    function(req, email, password, done) { 
     User.findOne({ 'email' : email }, function(err, user) { 
     if (err) return done(err); 
     if (!user){ 
      req.flash("email", req.body.email); 
      return done(null, false, req.flash('loginError', 'No user found.')); 
     } 
     if (!user.authenticate(password)){ 
      req.flash("email", req.body.email); 
      return done(null, false, req.flash('loginError', 'Password does not Match.')); 
     } 
     var email_address = req.body.email; 
     username_tmp = email_address; 
     var username = email_address.substring(0, email_address.lastIndexOf("@")); 
     global_username = username; 
     pass = req.body.password; 
     return done(null, user); 
     }); 
    } 
) 
); 

我認爲問題是因爲global_username,所以Paul可以看到Chris的位置視圖。但是,我不知道如何獲取用戶變量並將其放入每個用戶的ejs中。

有人可以幫我在這裏....?

在此先感謝!

P.S.如果我問的是困惑, 我可以再次編輯我的問題,並解釋更多...

回答

1

你不能使用全局變量,它們會覆蓋每個請求,這將導致您正在描述的問題。

相反,如果你已經設定了護照和express-session正確,護照將通過req.user爲每個(認證)請求的用戶數據:

app.get('/location', isLoggedIn, function(req, res) { 
    res.render('location/index1', { user : req.user }); 
}); 

您還可以看看the passport-local example application進行了解關於一切如何連接。

+0

感謝您的回答!它現在有效! :)並且對於遲到的迴應感到抱歉...:'(希望你有一個美好的一天!我的生活救星!:) – paulc1111

相關問題