nodejs怎么实现登录认证?

当我们登录了一个网站,在没有退出登录的情况下,我们关闭了这个网站 ,过一段时间,再次打开这个网站,依然还会是登录状态。这是因为,当我们登录了一个网站,服务器会保存我们的登录状态,直到我们退出登录,或者保存的登录状态过期。

那服务器是通过什么存储我们的登录状态的呢? 答案就是Session,服务通过Session能够记录每个客户端连接的状态。关于Session的原理,在这就不多说了,本文主要介绍在Express框架中,如何使用Session来实现用户登录身份验证。

nodejs实现登录认证的方法如下:

1、环境配置:

在Node环境中, 并没有集成Express和Session的库,因此需要进行安装,首先进入建立一个项目目录,然后在项目根目录中,利用下面命令安装四个模块。

1) Express

该模块能够让我们快速的搭建一个 Web 开发框架。

2) body-parser

该模块是 Express 模块的中间件,方便我们解析浏览器发送来的 body 数据。

3) express-session

该模块也是 Express 模块中间件,方便我们处理客户端的 session。

4) ejs

该模块是一个渲染引擎。 方便我们将后台变量数据绑定到前台页面上。

安装如下:

npm install express --save
npm install body-parser --save
npm install express-session --save
npm install ejs --save

2、登录与验证

Session能够标记客户端在服务器上的状态。利用这一点,我们能够实现客户端的登录验证。

Session登录验证的流程大致为:客户端若在未登录的状态下请求主页,那么服务器将该请求重定向到登录页面;客户端在登录后,服务器需要记录保存该客户端的登录状态,并给予一个活动期限,这样下一次服务器请求主页的时候,就能够判断该客户端的登录状态,若登录状态有效,直接返回客户端需要的页面,否则重定向到登录页面。

对于Session的过期时间,如果没有设置Session的过期时间,服务器会根据自己配置中默认有效期,将长期不与服务器交互的Session进行删除。

下面贴出实例代码,界面比较简单,服务器后台代码注释写的很清楚,因此就不再进行说明了。

项目的目录结构如下:

1 (2).jpg-600

登录页面(login.html) 代码如下:

<!DOCTYPE html><html lang="en"><head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style type="text/css">

    </style></head><body>
    <form action="/login" method="POST">
        用户名: <input type="text" name="username"/>  <br>
        密码: <input type="password" name="pwd"/>
        <input type="submit" value="Submit"/>
    </form>
</body>
</html>

主页(home.html)代码如下:

<!DOCTYPE html><html lang="en"><head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <div>用户名:<span><%= username %> </span>  <a href="/logout">退出登录</a></div>
</body>
</html>

服务器(app.js)代码如下:

/**
 * Created by tjm on 9/7/2017.
 */var express = require('express');var app = express();
 var session = require('express-session');var bodyparser = require('body-parser');
 // 下面三行设置渲染的引擎模板
 app.set('views', __dirname); //设置模板的目录
 app.set('view engine', 'html');// 设置解析模板文件类型:这里为html文件
 app.engine('html', require('ejs').__express); // 使用ejs引擎解析html文件中ejs语法
 app.use(bodyparser.json()); // 使用bodyparder中间件,
 app.use(bodyparser.urlencoded({ extended: true }));// 使用 session 中间件
 app.use(session({    secret :  'secret', // 对session id 相关的cookie 进行签名
    resave : true,    saveUninitialized: false, // 是否保存未初始化的会话
    cookie : {        maxAge : 1000 * 60 * 3, // 设置 session 的有效时间,单位毫秒
    },
}));
// 获取登录页面
app.get('/login', function(req, res){
    res.sendFile(__dirname + '/login.html')
});
// 用户登录
app.post('/login', function(req, res){
    if(req.body.username == 'admin' && req.body.pwd == 'admin123'){
        req.session.userName = req.body.username; // 登录成功,设置 session
        res.redirect('/');
    }    else{
        res.json({ret_code : 1, ret_msg : '账号或密码错误'});// 若登录失败,重定向到登录页面
    }
});
// 获取主页
app.get('/', function (req, res) {
    if(req.session.userName){  
    //判断session 状态,如果有效,则返回主页,否则转到登录页面
        res.render('home',{username : req.session.userName});
    }else{
        res.redirect('login');
    }
})// 退出app.get('/logout', function (req, res) {
    req.session.userName = null; // 删除session
    res.redirect('login');
});

app.listen(8000,function () {    console.log('http://127.0.0.1:8000')
})

到此,session 实现登录验证就完成。上面的例子 session 是保存在服务内存中,当然还可以保存在文件或数据库中,只需要配置 session 中间件即可。

app.use(session({    
    secret: 'secretkey',    
    store: new MongoStore({       
    db: 'sessiondb'
    })
}));

上面的代码则是将 session 保存到 MongoDB 数据库。

以上就是nodejs怎么实现登录认证?的详细内容,更多请关注0133技术站其它相关文章!

赞(0) 打赏
未经允许不得转载:0133技术站首页 » Node.js答疑