前端路线--Nodejs(day10)

01-session

//session 存储在服务端
// 作用,可以验证用户登录状态,如果登录session存在,可以判断已经登录了,否则需要登录
// session的存在依赖于cookie
// session也有有效期,主要是设置cookie的有效期

// session在nodejs中借助于第三方模块  express-session
// cnpm install express-session --save

// session的用法只要一直操作网站,session的时间要从新计算
// 如果超过session的有效期没有操作网站,那么会自动退出登录状态


let express = require('express');
//1.引入express-session模块
let session = require('express-session');

let app = new express();

app.listen(3000, () => {
    console.log('3000running');
});

//2.使用模块
app.use(session({
    secret: 'keybord cat', //任意字符串用来加密session
    resave: false, //强制保存session,默认true不保存,通常为false
    saveUninitialized: true, //将未初始化的session保
    cookie: { //设置cookie
        // secure:true  指的是https协议
        maxAge: 10 * 1000 //保存10s
    },
    rolling: true //让cookie的有效期重新计时(保证session不过期)
}));

//创建session
app.get('/login', (req, res) => {
    //使用/login路由时会存储一条session
    req.session.username = 'erge';
    res.send('存储了一条session,请查看');
});

//读取session
app.get('/userlist', (req, res) => {
    //读取session
    console.log(req.session.username);
    res.send('欢迎' + req.session.username + '登录网页');
});

02-需求session判断登录

let express = require('express');
//引入express-session模块
let session = require('express-session');

let app = new express();



//使用模块(需要放在使用路由的上面,要不然登陆了还没有使用引入的session模块)
app.use(session({
    secret: 'keybord cat', //任意字符串用来加密session
    resave: false, //强制保存session,默认true不保存,通常为false
    saveUninitialized: true, //将未初始化的session保
    cookie: { //设置cookie
        // secure:true  指的是https协议
        maxAge: 10 * 1000 //保存10s
    },
    rolling: true //让cookie的有效期重新计时(保证session不过期)
}));

// 需求:先判断是否登录了,如果没有登录重定向到登录页面,如果已经登录了,可以浏览其他页面
// 实现的思路
// 1、在所有的路由前边先拦截所有路由,满足指定的条件,才放开满足条件的路由
// 2、首先要放开登录路由,让用户登录,登录成功之后设置session
// 3、其他路由验证session是否存在,如果存在可以查看该路由页面,否则跳转到登录页面


//1.拦截所有的路由app.use(callback)
app.use((req, res, next) => {
    //req 请求  res 响应  next()是一个方法,满足条件知识next() 放行
    //req.url http://localhost:3000/login  req.url:/login
    if (req.url == '/login') {
        next(); //放行--就是可以看到login相对应的登录页面了
    } else if (!req.session.username) {
        //如果没有session则重定向为/login登录页面
        res.redirect('/login');
    } else {
        //表示登录成功之后,  放行
        next();
    }

});





//创建session
app.get('/login', (req, res) => {
    //使用/login路由时会存储一条session
    req.session.username = 'ergege';
    res.send('存储了一条session,请查看');
});

//读取session
app.get('/userlist', (req, res) => {
    if (req.session.username) {
        //读取session
        console.log(req.session.username);
        res.send('欢迎' + req.session.username + '登录网页');
    } else {
        res.send('请登录');
    }
});


app.listen(3000, () => {
    console.log('3000running');
});

改造项目项目的登录模块

//1.下载express-session模块
//2.引入express-session模块
//3.使用session模块(记不住可以去npmJS.com搜)
//4.改造login.ejs  让表单提交至http://localhost:9527/admin/dologin
//  给input框加上name
//  在接口中通过req.body接收数据
//5.在路由文件中添加接口
//6.在app.js中拦截路由


//5.用户点击登录页面登录按钮提交的接口
router.post('/dologin', async (req, res) => {
    // console.log(req.body);
    let { username } = req.body;
    ///添加用户的时候对密码进行md5加密,在登录的时候也要进行加密,这样才能保证和数据库中的密码一致
    let pwd = md5(req.body.pwd);
    // 登录的流程
    // 1、判断用户名是否存在,如果不存在,提示用户名不存在
    // 2、判断输入的用户和密码是否匹配,如果不匹配,提示用户名或者密码错误

    //如果输入用户名存在,验证用户名和密码是否匹配
    let result = await Users.find({ username, pwd });
    // console.log(result); 返回的是一个数组
    if (result.length > 0) {
        //如果返回的result的长度>0,说明用户名密码匹配
        //创建一个session
        req.session.username = result[0].username;
        res.redirect('/admin/userlist');
    } else {
        res.send(`<script>
            alert("用户名密码错误");
            location.href="/admin/login";
        </script>`);
    }
});
//注意:在此可以对login.ejs的页面使用ajax来判断用户名是否存在

//6.在app.js中拦截路由
//拦截路由(需要放在使用路由的上面)
app.use((req, res, next) => {
    //req 请求  res 响应  next()是一个方法,满足条件知识next() 放行
    //req.url http://localhost:3000/login  req.url:/login
    if (req.url == '/admin/login' || req.url == '/admin/dologin' || req.url == '/admin/isusername') {
        next(); //放行--就是可以看到login相对应的登录页面了
    } else if (!req.session.username) {
        //如果没有session则重定向为/login登录页面
        res.redirect('/login');
    } else {
        //表示登录成功之后,  放行
        next();
    }
});

改造的登录模块点击下载详细查看

node.js登录案例

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值