簡體   English   中英

如何在node.js中使用用戶身份驗證

[英]How to use User Authentication with node.js

我嘗試練習使用用戶身份驗證。

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

我希望它可以向我顯示登錄界面。

腳步:

1.使用localhost:12345 / login_page連接服務器

2.然后向我顯示登錄界面

3.輸入用戶名和密碼

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);

您可能需要更改:

res.session.logined = true;

至:

req.session.logined = true;

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

使用主體解析器。

更改res.bodyreq.body

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

這些甚至可能不是該程序中的所有錯誤,但它們是最明顯的錯誤。 考慮到您自己實現時遇到問題,使用Passport可能會更好,特別是在您的情況下使用本地護照策略,因為它將為您處理很多邏輯。 這是一個很好的教程:

對於托管靜態文件(如HTML),請參見以下答案:

您在這里有幾個錯誤。 首先,每個請求不能多次使用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);

顯然,為了更好的實踐,您應該使用'res.render or 'res.sendFile將響應與html文件一起發送。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM