博客项目——登录功能实现

客户端(login.art)
登录功能实现,表单要添加name属性,这样才能向服务器提交数据

<div class="login-body">
        <div class="login-container">
            <h4 class="title">黑马程序员 - 博客管理员登录</h4>
            <div class="login">
                <form action="/admin/login" method="post" id="loginForm">
                    <div class="form-group">
                        <label>邮件</label>
                        <input name="email" type="email" class="form-control" placeholder="请输入邮件地址">
                    </div>
                    <div class="form-group">
                        <label>密码</label>
                        <input name="password" type="password" class="form-control" placeholder="请输入密码">
                    </div>
                    <button type="submit" class="btn btn-primary">登录</button>
                </form>
            </div>
            <div class="tips"></div>
        </div>
    </div>

服务器端(login.js)
通过引入body-parser模块处理post请求参数
通过引入boduParser的方式处理请求参数 urlencoded里边extended:值为
false时会使用querystring处理请求参数,当值为true时,会使用qs的方式
处理请求参数(推荐false)

//引入body-parser模块,处理请求参数
const bodypaser = require('body-parser');
//创建服务器
const app = express();
//处理post请求参数
app.use(bodypaser.urlencoded({ extended: false }));

服务器端(app.js)
登录成功和没成功结果是一样的,这是由于http的无状态性(因为网站基于
http协议,客户端和服务器端请求响应一次后就断开,只关心请求,完成后
就断开)因此必须要建立客户端和服务器端的关联关系,要借助cookie
sesson技术。引入express-session模块
模块返回一个方法,我们用session接受,调用该方法就可以在服务器端创建session对象。方法内部为请求对象创建一个session属性,用于存放用户数据,并生成sessionid(唯一对应该数据),放在客户端cookie中。当向服务器端请求数据时,方法内部会从客户端cookie中获取sessionid,服务器从而知道访问其用户,联系建立。
里边参数是秘钥,可自定义值,用于客户端cookie加密和服务器端cookie解密

//引入express-session模块 该模块返回一个方法,用变脸接收
const session = require('express-session');
app.use(session({
    resave: false, //添加 resave 选项
    saveUninitialized: true, //添加 saveUninitialized 选项
    secret: 'aF,.j)wBhq+E9n#aHHZ91Ba!VaoMfC', // 建议使用 128 个字符的随机字符串
    cookie: { maxAge: 60 * 1000 }
  }));

服务器端(loginPage.js)
引入bcrypt.js进行密码加密处理

//引入user用户构造集合
const { User } = require('../../model/user');
//引入bcrypt模块进行密码加密处理
const bcrypt = require('bcryptjs');
module.exports = async (req, res) => {
    const { email, password } = req.body
    
    if (email.trim().length == 0 || password.trim().length == 0) {
        return res.status(400).render('admin/error', { msg: '邮件或密码错误' });
    }  
   // 根据邮箱查找用户(es6写法,键值对省略),找到则为用户集合对象,否则为空
    let user =await User.findOne({ email });
    if (user) {
        //密码比对成功,则登录.使用await bcrypt.compare进行加密密码比对
        let isVaild = await bcrypt.compare(password,user.password);
        if (isVaild) {
            //将用户名存储到请求参数中
            req.session.username = user.username;
            //同上将用户角色放在session中
            req.session.role = user.role;
            else {
            return res.status(400).render('admin/error', { msg: '邮件或密码错误' });
        }
    } else {
        return res.status(400).render('admin/error', { msg: '邮件或密码错误' });
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值