如何使用node.js进行用户身份验证

时间:2017-03-21 17:20:14

标签: 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);

2 个答案:

答案 0 :(得分:1)

您可能需要更改:

res.session.logined = true;

为:

req.session.logined = true;

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

使用身体解析器。

res.body更改为req.body

将内容类型更改为text/html

那些甚至可能不是该程序中的所有错误,但那些是最明显的错误。考虑到您自己实现这些问题,最好使用Passport,特别是在您的情况下使用passport-local策略,因为它会为您处理很多逻辑。这是一个很好的教程:

对于托管静态文件(如HTML),请参阅以下答案:

答案 1 :(得分: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);

显然,为了更好的练习,您应该使用'res.render htmlor 'res.sendFile个文件发送回复。

相关问题