Node博客项目——登录退出功能

Node博客项目——登录退出功能

1.案例初始化

1.  文件夹

2.登录

  1. 初始化用户,连接数据库,创建用户集合,添加数据
  2. 设置路由
  3. 表单提交路径,name传值,服务端req.body获取传来的值
  4. 提交前,客户端进行验证,提交后服务器端验证。
  5. 服务端接受数据 与 服务器端查询数据库中的邮箱进行比对,若存在,再比对密码,比对成功,登录成功。
  6. 登录密码加密 使用模块const bcrypt = require('bcrypt');
  7. 登录无状态解决方案cookie session

3. 代码

准备:模板模块化,将公共部分抽离,通过继承传递模板

//app.js
const express = require('express');

const path = require('path');
const bodyParser = require('body-parser')
const session = require('express-session')


// 创建网站服务器
const app = express()
// 引入数据库连接
require('./model/connect.js')
// 处理post请求参数
app.use(bodyParser.urlencoded({extended:false}))

// 配置session
app.use(session({secret:'secret key'}))

// 模板所在的位置
app.set('views',path.join(__dirname,'views'))
// 默认后缀
app.set('view engine','art');
app.engine('art',require('express-art-template'))

// 开放静态资源文件
app.use(express.static(path.join(__dirname,'public')))

// 引入路由模块
const home = require('./route/home')
const admin = require('./route/admin')

// 中间件在配置路由之前 
app.use('/admin',require('./middleware/loginGuard'))

// 配置请求路径
app.use('/home',home);
app.use('/admin',admin);
app.listen(3000)
console.log('success');

//路由整理  将单个功能的路由分离 留一个主文件引入
//admin
// 引用expess框架
const express = require('express');

const admin = express.Router();

// 渲染登录页面
admin.get('/login',require('./admin/loginPage') );

// 实现登录功能
admin.post('/login', require('./admin/login'))

// 挂载二级路由
// 创建用户列表路由
admin.get('/user', require('./admin/userPage'))

// 实现退出功能
admin.get('/logout',require('./admin/logout'))

// 将路由对象做为模块成员进行导出
module.exports = admin;
//login  实例 其他路由模块皆如此
// 导入用户集合构造函数
const { User } = require('../../model/user')
const bcrypt = require('bcrypt');

module.exports  = async (req, res) => {
    // 接受请求参数  body-parse
    const { email, password } = req.body;
    if (email.trim().length == 0 || password.trim().length == 0) {
        return res.status(400).render('admin/error', { msg: '邮件地址或者密码错误' })
    }

    // 根据邮箱地址查询用户信息
    let user = await User.findOne({email})
    if(user){
        // 查询到  比对 password == user.password
        let isValid = await bcrypt.compare(password,user.password);
        if(isValid){
            // 比对成功  登录
           req.session.username = user.username;
            //重定向到用户列表页面
            req.app.locals.userInfo = user;
            res.redirect('/admin/user')
        }else{
            // 比对失败  提示
            res.status(400).render('admin/error',{ msg: '邮件地址或者密码错误' })
        }
    }else{
        // 没有用户
        res.status(400).render('admin/error',{ msg: '邮件地址或者密码错误' })
    }
}

小结:同步项目过程
session和cookie还要做详解

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值