1

我正在使用Passport Local Strategy從用戶表中驗證特定用戶,然後獲取該用戶數據以查看:護照本地策略無法檢索特定的用戶數據,但它提供表中的第一個用戶數據

passport.use(new LocalStrategy(
    function (username, password, done) { 
    User.findOne({ where: { username } }) 
     .then(function (user) { 
     if (!user) { 
      return done(null, false); 
     } 
     else { 
      if (user.password != password) { 
      return done(null, false); 
      } 
     } 
     return done(null, user); 
     }); 
    })); 

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

passport.deserializeUser(function (username, done) { 
    User 
    .find({ username: username }) 
    .then(function (user) { 
     done(null, user); 
    }); 
}); 

獲取isAuthenticated從當地的護照,並將其傳遞到索引路線:

router.get('/', function (req, res) { 
    res.render('index', { 
    title: 'Title', 
    isAuthenticated: req.isAuthenticated(), 
    user: req.user 
    }); 
}); 

登錄路線:

router.get('/login', function (req, res) { 
    res.render('login', { title: 'Sign in' }); 
}); 

router.post('/login', passport.authenticate('local'), function (req, res) { 
    res.redirect('/'); 
}); 

但是,當用戶登錄時,它會對用戶進行身份驗證並將其帶到索引頁面,但會在索引頁面歡迎消息中顯示數據庫表中的第一個用戶名。它不顯示當前的用戶名。

這裏是索引頁:

extends layout 

block content 

    h1(id='title')= title 
    p Welcome to #{title} 
    if !isAuthenticated 
    a(href="login") Sign in 
    p 
    a(href="signup") Create an account 
    else 
    p Welcome #{user.username} 
    a(href="Logout") Logout 

回答

0

變化在deserializeUser功能User.find({ username: username })User.find({ where: {username: username} })

+0

我更新了'deserializeUser'函數,在'{用戶名:用戶名}'之前加了'where',它就起作用了! – mhasan

相關問題