2017-12-15 12 views
0

パスポートjsを使用して認証を実装しています。データベースはmysqlです。私のsuccessRedirectルートは '/ main'で、メインルートにはミドルウェア(isAuthenticated)が追加されています。しかし、問題は、有効な資格情報を入力した後で、代わりに '/ main'にリダイレクトされず、ただタイムアウトになるということです。私はミドルウェアを '/ main'ルートに追加せずに試しました。うまく動作します。Passport JS認証ミドルウェアの問題

var isAuthenticated = function(req, res, next) { 
 
    if (req.isAuthenticated()) { 
 
     return next; 
 
    } 
 
    res.redirect("/login") 
 
} 
 

 
// AUTH Implementation 
 

 
app.use(session({ 
 
    secret: "asdnoifjasofijmaofmjkneknf", 
 
    resave: false, 
 
    saveUninitialized: false 
 
})) 
 

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

 
passport.use(new localStrategy(
 
    function(username, password, done) { 
 
     connection.query("SELECT password FROM user" + 
 
      " WHERE email = ?", [username], function (err, results, fields) { 
 
      if (err) { 
 
       console.log(err); 
 
      } 
 
      else if (results.length === 0) { 
 
       done(null, false); 
 
      } 
 
      else { 
 
       console.log("Results"); 
 
       console.log(results[0]); 
 
       hashedPassword = results[0].password; 
 
       bcrypt.compare(password, hashedPassword, function (err, response) { 
 
        if (response) { 
 
         console.log("True"); 
 
         return done(null, true); 
 
        } 
 
        else { 
 
         console.log("False"); 
 
         return done(null, false); 
 
        } 
 
       }) 
 
      } 
 
     }) 
 
    } 
 
)); 
 

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

 
passport.deserializeUser(function(ID, done) { 
 
    connection.query("SELECT * FROM user WHERE userID = ?", [ID], function (err, results, fields) { 
 
     if (err) throw err; 
 
     else if (results.length === 0) done(null, false); 
 
     else { 
 
      done(null, results[0]); 
 
     } 
 
    }) 
 
    done(null, ID); 
 
}); 
 

 
app.post("/login", passport.authenticate('local', { 
 
    successRedirect: "/main", 
 
    failureRedirect: "/login" 
 
})) 
 

 
app.get("/main", isAuthenticated, function(req, res) { 
 
    res.send("In the main page"); 
 
})

app.post("/login", passport.authenticate('local', { 
 
    successRedirect: "/main", 
 
    failureRedirect: "/login" 
 
}))

私を助けます。

答えて

0

返す代わりにnext関数を実行する必要があります。

var isAuthenticated = function(req, res, next) { 
    if (req.isAuthenticated()) { 
     return next(); 
    } 
    res.redirect("/login") 
} 
+0

私はちょうど1時間前にそれを理解することができました。ご協力いただきありがとうございます。 –

関連する問題