【无标题】后台管理系统-个人中心

本文详细介绍了后台管理系统中个人中心的相关功能,包括获取用户信息、更新用户信息、修改密码和更新头像照片的步骤。在获取用户信息时,通过路由模块和JWT中间件处理。更新用户信息涉及表单验证和SQL操作。密码修改需要验证旧密码并使用bcryptjs进行密码比较。更新头像则涉及到文件上传和数据库更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

个人中心

一、获取用户信息
1.初始化路由模块

const express = require('express')
const router  = express.Router()
// 验证数据的中间件
const expressjoi = require('@escook/express-joi')
// 导入验证规则
const {update_userinfo_schema,update_password_schema,update_avatar_schema} = require('../schemn/user')
// 导入处理函数
const userinfo_handle = require('../router_handle/userinfo')
// 挂载路由
// 获取路由信息的路由
router.get('/userinfo',userinfo_handle.getUserinfo )

2.在 app.js 中导入并使用个人中心的路由模块

// 导入使用用户信息的模块
const userinfoRouter = require('./router/userinfo')
app.use('/my',userinfoRouter)

3.初始化路由处理函数,注意:req 对象上的 user 属性,是 Token 解析成功,express-jwt 中间件帮我们挂载上去的

const db = require('../router/db/index')
// 导入处理密码的模块
const bcrypt = require('bcryptjs')
const express = require('express')
// 获取用户信息 的基本的处理函数
exports.getUserinfo =(req,res) => {
    // 定义查询sql语句
    const sql = 'select id,username,nickname,email,user_pic from ev_users where id=?'
    // 调用db.query()语句执行这个语句   res.send(req.user)
    db.query(sql,req.user.id, (err,results) =>{
        // 执行SQL语句失败
        if(err)  return res.cc(err)
        // SQL成功 查询为空的情况
        if(results.length !==1 ) return res.cc('获取用户信息失败')
        // 获取用户信息成功
        res.send({
            status:0,
            message:'获取用户信息成功',
            data:results[0]
        })
    })
}

执行成功

二、更新用户信息
1.定义路由和初始函数
1.1在 userinfo.js模块中,添加更新基本用户信息的路由,以及导入验证信息的对象

// 更新用户的基本信息 
router.post('/userinfo', expressJoi(update_userinfo_schema), userinfo_handler.updateUserInfo)

1.2定义并向外共享更新用户基本信息的路由处理函数

// 更新用户基本信息的处理函数 
exports.updateUserInfo = (req, res) => { res.send('ok') }

2.验证表单
2.1 定义验证规则

// 定义id,nickname,email的验证规则 integer整数
const id = joi.number().integer().min(1).required()
const nickname = joi.string().required()
const email = joi.string().email().required()

2.2 使用 exports 向外共享如下的 验证规则对象

// 更新用户信息的验证规则
exports.update_userinfo_schema = {
    body: {
        id,
        nickname,
        email
    }
}

3.实现更新用户基本信息
3.1定义SQL的语句

const sql = 'update ev_users set ? where id=?'

3.2 调用db.querey()执行SQL语句

db.query(sql,[req.body,req.body.id], (err,results) => {
    // 执行sql失败
    if(err) return res.cc(err)
    //语句执行成功,但是影响的行数不等于一
    if(results.affectedRows !==1) return res.cc('更新用户信息失败')
    res.cc('更新用户信息成功')
})

注意填写Authorization信息
执行成功结果:

缺少验证规则:

三、修改密码
1.定义路由和处理函数
1.1新增重置密码的路由

// 更新密码的路由
router.post('/updatepwd', expressjoi(update_password_schema),userinfo_handle.updarePass)

1.2 创建重置密码的处理函数,并且向外共享

// 重置密码的处理函数 exports.updatePassword = (req, res) => { res.send('ok') }

2.验证表单规则
2.1 定义验证表单规则:核心验证思路:旧密码与新密码,必须符合密码的验证规则,并且新密码不能与旧密码一致

exports.update_password_schema = {
    body:{
        // 使用password这个规则,验证req.body.oldPwd的值
        oldPwd: password,
        // joi.ref('oldPwd')代表着newPwd的值必须和old一致;joi.not(joi.ref('oldPwd'))代表着不能和旧密码一致
        // .concat()用于合并joi.not(joi.ref('oldPwd'))和password的规则
        newPwd: joi.not(joi.ref('oldPwd')).concat(password)
    }
}

2,2 导入并且使用验证规则

//导入需要的验证规则对象 
const { update_userinfo_schema, update_password_schema } = require('../schema/user')

router.post('/updatepwd', expressJoi(update_password_schema), userinfo_handler.updatePassword)

3.实现重置密码的功能
3.1 查询用户的id是否存在

// 定义根据 id 查询用户数据的 SQL 语句 const sql = `select * from ev_users where id=?` 
// 执行 SQL 语句查询用户是否存在 db.query(sql, req.user.id, (err, results) => { 
// 执行 SQL 语句失败
if (err) return res.cc(err)
// 检查指定 id 的用户是否存在
if (results.length !== 1) 
return res.cc('用户不存在!')
// TODO:判断提交的旧密码是否正确 
})

3.2 判断旧密码是否正确,在头部区域导入 bcryptjs 后, 即可使用 bcrypt.compareSync(提交的密码,数据库中的密码) 方法验证密码是否正确 ,compareSync() 函数的返回值为布尔值,true 表示密码正确,false 表示密码错误

const bcrypt = require('bcryptjs') 
// 判断提交的旧密码是否正确
const compareResult = bcrypt.compareSync(req.body.oldPwd, results[0].password)
if (!compareResult) 
return res.cc('原密码错误!')

3.3 密码正确之后,修改密码,首先将密码进行一次bcrypt加密

 // 将旧密码改成新密码
 const sqlStr  = 'update ev_users set password=? where id=?'
// 将新密码进行bcrypt加密
  const newPwd = bcrypt.hashSync(req.body.newPwd,10)
// 执行更新密码的语句
db.query(sqlStr,[newPwd,req.user.id], (err,results) => {
if(err) return res.cc(err)
 // 判断影响的行数
if(results.affectedRows !==1) return res.cc('密码更新失败')
// 成功
res.cc('密码更新成功',0)
        })

实现的效果:

四、更新头像照片
1.定义路由和处理函数
1.1 新增添加修改用户头像的路由模块

// 更新用户头像的路由 router.post('/update/avatar', userinfo_handler.updateAvatar)

1.2 定义更改头像的处理函数

// 更新用户头像的处理函数 exports.updateAvatar = (req, res) => { res.send('ok') }

2.定义验证规则信息
2.1 定义 avatar 的验证规则如下

// dataUri() 指的是如下格式的字符串数据:
//data:image/png;base64,VE9PTUFOWVNFQ1JFVFM= 
const avatar = joi.string().dataUri().required()

2.2 想外共享验证规则

// 验证规则对象 - 更新头像 exports.update_avatar_schema = { body: { avatar, 
},
}

2.3获取验证规则并使用

const { update_avatar_schema } = require('../schema/user')

router.post('/update/avatar', expressJoi(update_avatar_schema), userinfo_handler.updateAvatar)

3.实现更新用户头像的功能
3.1 定义SQL语句

const sql = 'update ev_users set user_pic=? where id=?'

3.2 执行SQL语句

db.query(sql, [req.body.avatar, req.user.id], (err, results) => {
// 执行 SQL 语句失败 
if (err) return res.cc(err) 
// 执行 SQL 语句成功,但是影响行数不等于 1
if (results.affectedRows !== 1) 
return res.cc('更新头像失败!') 
// 更新用户头像成功 
return res.cc('更新头像成功!', 0)
})

实现的效果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值