2016-02-21 58 views
0

雖然試圖獲得isAuthenticated工作作爲中間件檢查,我似乎無法得到這是真實的。我已記錄結果,每次不管我已經嘗試它總是結束這是錯誤的。我想得到一些幫助,爲什麼這可能會發生。提前感謝所有願意幫助我的人。我使用的數據庫是MySQL,如果它有幫助。isAuthenticated總是假,而使用護照與續集

function isLoggedIn(req, res, next) { 

if (req.isAuthenticated()){ 
    console.log('user logged in', req.user); 
    return next(); 
}else{ 
    console.log('user not logged in'); 
    res.redirect('/login'); 
} 

} 

這是我的路線

app.post('/login', passport.authenticate('local-login', { 
    successRedirect : '/admin', 
    failureRedirect : '/login', 
    failureFlash : true 
})); 

而且我passport.js當地的戰略思考

passport.use('local-login', new LocalStrategy({ 
    usernameField : 'username', 
    passwordField : 'password', 
    passReqToCallback : true 
}, 
function(req, username, password, done) { 
    models.User.find({ where:{'username' :username }}).then(function(user) { 
     passwd = user ? user.password : '' 
     if (!user) 
      return done(null, false, req.flash('loginMessage', 'No user found.')); 

     if (!models.User.validPassword(password, passwd)) 
      return done(null, false, req.flash('loginMessage', 'Oops! Wrong password.')); 

     return done(null, user); 
    }); 
})); 

並設置我的server.js這樣

app.use(morgan('dev')); // log every request to the console 
app.use(cookieParser()); // read cookies (needed for auth) 
app.use(bodyParser.json()); // get information from html forms 
app.use(bodyParser.urlencoded({ extended: true })); 

app.use(express.static(path.join(__dirname, 'public'))); 
app.set('view engine', 'ejs'); 

app.use(session({ 
    secret: 'tengence' , 
    saveUninitialized: true, 
    resave: true 
})); // session secret 
require('./config/passport')(passport); 
app.use(passport.initialize()); 
app.use(passport.session()); // persistent login sessions 
app.use(flash()); 

require('./app/routes.js')(app, passport); 

app.listen(port); 
console.log('Server started at ' + port); 

回答

0

我感覺像一個白癡,因爲我忘了添加這個小方法這恰好稱爲登錄。它是一個漫長的編碼日,我的眼睛只需要休息我猜。

///Very important to not to forget to do below!! 
     req.login(user, function(err){ 
      if (err) { 
       return done(null, false, req.flash('loginMessage', 'Something went wrong.' + err)); 
      } 
     }); 
+0

請將此答案標記爲接受的答案,因爲那樣它就不會顯示爲未答覆的問題。 :) – leroydev

+0

根據堆棧溢出,我不能直到明天 – tengence