2013-12-22 65 views
0

我有一個express應用程序,我試圖使用passport-local進行驗證。這裏是我的express應用程序:使用Passport驗證快速應用程序 - Expressjs Passportjs

app.use(express.bodyParser()); 
app.use(express.cookieParser()); 
app.use(express.session({ secret: 'this is a string' })); 
app.use(passport.initialize()); 
app.use(passport.session()); 

client = new pg.Client(connectionString); 
client.connect(); 

passport.use(new LocalStrategy(
    function(username, password, done) { 
    var query = client.query('SELECT * FROM users WHERE EMAIL = $1', [username], function(err, result){ 
     if(err) { 
     console.log("Error"); 
     return done(err); 
     } 
     if(!result.rows.length > 0) { 
     console.log("No users"); 
     return done(null, false, { message: 'User not found'}); 
     } 
     if(result.rows[0].password !== password) { 
     console.log("incorrect password"); 
     return done(null, false, { message: 'Password Incorrect'}); 
     } 
     console.log('authenticated'); 
     return done(null, result.rows[0]); 
    }); 
    } 
)); 

passport.serializeUser(function(user, done) { 
    'use strict'; 
    console.log('serialize'); 
    console.log(user); 
    done(null, user.email); 
}); 

passport.deserializeUser(function(id, done) { 
    'use strict'; 
    console.log('deserialize'); 
    User.findById(id, function(err, user) { 
    done(err, user); 
    }); 
}); 

app.post('/login', passport.authenticate('local'), function(req, res) { 
    'use strict'; 
    console.log(req.user.username); 
}); 

app.listen(port, function() { 
    'use strict'; 
    console.log('Listening on:', port); 
}); 

我然後打/login網址與此json在我的身上:{username: '[email protected]', password: 'password}。我通過LocalStrategy函數,然後在序列化函數中,它將函數調用到done函數,然後掛起。我沒有得到任何錯誤或額外的日誌記錄,連接只是保持打開狀態,並且控制權不會返回給調用者。我從來沒有收到http狀態,它只是掛起。

我認爲這是我的session的問題,但我不明白接下來要做什麼?

+0

簡短的問題。您是否在console.log(req.user.username)處獲得了輸出;何時打開yourDomain:port/login? – ztirom

+0

我弄不明白。 – jhamm

+0

我將它改爲'console.log(req.user.user_name)',然後獲取用戶名。 – jhamm

回答

1

好的,你可以嘗試重定向嗎?它看起來像你的會話/授權是好的,如果你在這一點上得到一個正確的用戶名。

app.post('/login', passport.authenticate('local', { 
    successRedirect: '/somewhere_intern', 
    failureRedirect: '/login' 
})); 
+0

我添加了'{successRedirect:「/ users」,failureRedirect:「/ projects」}'然後我得到的錯誤是'無法GET /用戶'。 – jhamm

+0

我沒有在這個文件中定義'/ users'路由。 – jhamm

相關問題