后台项目 Express-Mysql-Vue3-TS-Pinia 设置 token

351 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第27天,点击查看活动详情

后台项目 Express-Mysql-Vue3-Ts-Pinia 设置 token

引言

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

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

token概念

我们一般所说的 token ,就是 json web token,简称 jwt

token 的工作流程为:

  • 前端登录,提交账号和密码

    • 此时服务端会 确认账号和密码,成功的话,会返回客户端一个 token 字符串值

    • 这个值代表的 就是这个用户,是由 用户 的信息所组成

  • 前端收到这个 token,将其放置在 localstorage 中。

    并在每次提交请求时,携带这个 token

    • 服务端 接收到这个请求,就会收到这个 token

    • 就会解析 token,就能够获取到哪个用户的请求来的,也称 认证用户

    • token验证成功后,就会将数据返回给前端

jwt

上面说了,token 是由用户的身份确定的。那么说一下 jwt 的组成

主要是三部分,header.payload.signature 分别对应 头,有效载荷,签名

有效载荷 的值,主要是用户信息。

设置 token

首先在后端安装 jsonwebtoken 这个库

npm i jsonwebtoken

在与 app.js 同级目录下创建一个 utils 文件夹,再创建一个 useJwt.js 文件,用于设置 token

image.png

设置 token 主要是通过 jwt.sign 方法,需要传递三个参数

image.png

const jwt = require('jsonwebtoken');
const config = require('../config/config.default')

const setToken = (username) => {
  return jwt.sign(
    // payload 存储用户信息
    { username },
    // 私钥
    config.PRIVATE_KEY,
    // 设置过期时间
    { expiresIn: config.JWT_EXPIRED }
  )
}

module.exports = {
  setToken
}

image.png

我们在登录成功时,进行引入使用,即 controller/user/index.js 文件中进行引入

const { setToken } = require('../../utils/useJwt')

// 登陆成功
res.send({
  code: 200,
  data: {
    message: '登录成功!',
    token: setToken(username),
    flag: true
  }
})

此时我们的 token 即可生成完毕。

我们尝试在前端进行登录,发现可以成功获取到 token

image.png

并且如果再次登录,进行比较后,会发现两个 token 的值 是不一样的。

image.png

总结

通过 Express-Mysql-Vue3-TS-Pinia 做出一个 后台系统 项目,解释 token,并设置 token