后台项目 Express-Mysql-Vue3-TS-Pinia 当前用户信息

623 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第29天,点击查看活动详情

当前用户信息

引言

通过之前一段时间 ExpressMysql 的学习

这里尝试来搭建一个 后台系统 来巩固下学习的技术。

当前用户信息

上一节,我们将 用户的一个 登录 的 前后端 逻辑 彻底做完毕了

这一节,我们来处理 当前用户信息

什么是 当前用户信息

  • 也就是在我们 登录 完成后,如果此时并不想将 敏感的用户信息 保存到本地的浏览器中,也就是 localstorage

  • 那我们的 用户数据 信息,如何获取呢?

获取当前用户信息

还记得,我们在 登录 完成后,会得到一个响应的数据 token 吗?

是的,这个 token 是我们存储到本地缓存中的,是不会随着刷新浏览器,而消失的。

所以在我们每次浏览器请求时,其实都会在请求头中,携带这个 token。那么我们就需要通过 后端 来解析用户请求头中的 token 来得到 当前请求 具体的 用户名 是谁

既然知道逻辑是什么了,我们准备后端的 API 接口

  • 解析 token

    const decode = (req) => {
      const token = req.headers?.authorization
    
      return jwt.verify(token, config.PRIVATE_KEY)
    }
    
    const { username } = decode(req)
    
  • 相关的 sql 语句

    const selectOneUserInfo = `select user.id,user.create_time,user.username,userinfo.name,userinfo.email,userinfo.avatar_id,userinfo.roleArrId from user join userinfo on user.id = userinfo.userid where user.username = ?;`
    
  • 根据上面解析的 用户名,去获取用户详细信息

    const sql = sqlAll.selectOneUserInfo
    const sqlArr = [username]
    
    const callback = (error, results) => {
      if (error) {
        console.log('连接出错')
        return
      }
    
      const user = results[0]
      user.roleArrId = JSON.parse(user.roleArrId)
    
      // 登陆成功
      const code = 200
      const data = {
        message: '获取用户详细信息成功!',
        user,
        flag: true
      }
      useResSend(res, code, data)
    }
    
    sqlConnect(sql, sqlArr, callback)
    
  • 在目录位置: router\user\index.js 文件中, 暴露我们的当前用户信息接口 info API

     const Api = {
      info: '/info',
    }
    
    router.get(Api.info, userController.info)
    

总结

通过 Express-Mysql-Vue3-TS-Pinia 做出一个 后台系统 项目

完成了,可以请求获取 当前用户信息 的接口 API