2017-03-21 34 views
0

我嘗試使用用戶身份驗證進行練習。如何通過node.js使用用戶身份驗證

但它不能按我的預期工作。

我預料它可以顯示我的登錄界面。

步驟:

1.使用本地主機:12345/login_page到

2.然後顯示登錄界面將服務器連接到我

教育部重點中的用戶名和密碼

var express = require('express'); 
var cookieSession = require('cookie-session'); 
var app = express(); 

app.use(cookieSession({ 
    secret: 'session', 
    keys: 'node' 
})); 

app.get('/login_page', function(req, res){ 
    if(!req.session.logined){ 
     res.send('<a href="http://127.0.0.1:12345/logout">Logout Now</a>'); 
     res.end(); 
     return; 
    } 
    res.send('<form action="http://localhost:12345/login" method="POST">'); 
    res.send('<input type="text" name="username">'); 
    res.send('<br/>'); 
    res.send('<input type="password" name="password">'); 
    res.send('<br/>'); 
    res.send('<input type="submit" value="login">'); 
    res.send('</form>'); 
    res.end(); 
}); 

app.post('/login', function(req, res){ 
    if(res.body.username != 'user' || 
     req.body.password != '12345678'){ 

     res.send('Account or password error, please login again'); 
     res.end(); 
     return; 
    } 
    res.session.logined = true; 
    res.redirect('/login_page'); 
    res.end(); 
}); 

app.post('/logout', function(req, res){ 
    req.session.logined = false; 
    res.redirect('/login'); 
    res.end(); 
}); 

app.listen(12345); 
+0

您不能使用'res.send'兩次。您應該將登錄頁面作爲'html'文件發送。 –

+0

查看我更新的答案。 – rsp

回答

1

您可能需要更改:

res.session.logined = true; 

到:

req.session.logined = true; 

另外,更改res.send()res.write()

使用正文解析器。

res.body更改爲req.body

並將內容類型更改爲text/html

這些甚至可能不是該程序中的所有錯誤,但這些是最明顯的錯誤。考慮到你自己實施時遇到了問題,你最好使用Passport,特別是在你的情況下使用passport-local策略,因爲它會爲你處理很多邏輯。這裏是一個很好的教程:

而對於託管靜態文件,如HTML,看到這樣的回答:

+0

對不起,我犯了一個非常嚴重的錯誤。你分享的信息給了我很大的幫助。現在我解決了這個問題。十分感謝。 –

0

你有幾個失誤這裏。 首先,每個請求不能多次使用res.send()函數,最後不必使用res.end

所以,你的代碼應類似於此:

var express = require('express'); 
var cookieSession = require('cookie-session'); 
var app = express(); 

app.use(cookieSession({ 
    secret: 'session', 
    keys: 'node' 
})); 

app.get('/login_page', function(req, res){ 
    if(!req.session.logined){ 
     res.send('<a href="/logout">Logout Now</a>'); 
    } 
    res.send('<form action="/login" method="POST"> <input type="text" name="username"><br/><input type="password" name="password"><br/><input type="submit" value="login"></form>'); 
}); 

app.post('/login', function(req, res){ 
    if(res.body.username != 'user' || 
     req.body.password != '12345678'){ 

     res.send('Account or password error, please login again'); 
    } 
    req.session.logined = true; 
    res.redirect('/login_page'); 
}); 

app.post('/logout', function(req, res){ 
    req.session.logined = false; 
    res.redirect('/login'); 
}); 

app.listen(12345); 

很顯然,爲了更好的做法,你應該html文件發送您的答覆,使用「res.render or 'res.sendFile

+0

它無法解決我的問題。但你告訴我哪裏錯了。非常感謝你。 –

相關問題