首页 > 其他分享 >【Vue3】前端使用JWT令牌技术的实践方案

【Vue3】前端使用JWT令牌技术的实践方案

时间:2024-07-30 13:24:01浏览次数:18  
标签:令牌 const JWT jwt token Vue3 data response

目录

技术介绍

简单介绍:

详细介绍:

操作流程

1.后端在登录响应里返回jwt

2.前端将该变量存入浏览器当中

3.前端使用jwt

请求的时候作为请求头

解码令牌内信息


技术介绍

简单介绍

        JWT令牌是一种用户校验机制,在登录后服务器会返回用户一个JWT令牌(相当于门票),用户根据这个令牌(门票)可以在一定时限内访问网站资源。但令牌(门票)一过期用户就需要重新登录。

详细介绍

【深度知识】JSON Web令牌(JWT)的原理,流程和数据结构-腾讯云开发者社区-腾讯云

操作流程

1.后端在登录响应里返回jwt

//UserController.java
@PostMapping("/doLogin")
    public R<String> userLogin(@RequestBody LoginInfo loginInfo){

        User user = userService.login(loginInfo);

        if(user!=null){
            Map<String, Object> claims = new HashMap<>();
            claims.put("userId",user.getUserId());
            claims.put("userName",user.getUserName());

            String jwt = JwtUtils.generateJwt(claims);
            return R.success(jwt);
        }

        return R.error("用户名或密码错误");
    }
  • 使用前需要导入JwtUtils这个类

2.前端将该变量存入浏览器当中

const response = await axios.post(`${config.url}doLogin`, {
    userName: this.username,//注意这里的变量名要和后端保持一致,name的n也要大写
    password: this.password
});
console.log('Response:', response); // 打印原始响应,便于调试

if (response.data.code === 200) {
    const jwtToken = response.data.data; // 确保正确访问 token
    localStorage.setItem('jwt', jwtToken);  // 保存 JWT 到 localStorage
    this.$router.push('/');  // 重定向到主页
} else {
    this.error = true;
    this.errorMessage = response.data?.message || '登录失败';
    alert(response.data.msg)
}
  • 需要确保response.data.data里面的是后端返回的jwt的值,此处需要灵活改变
  • localStroage里面是在浏览器本地设置了一个键值对,此处的键为jwt:
  • 可以直接打开开发者工具并在【应用-本地存储空间-前端运行端口号】处查看:

3.前端使用jwt

请求的时候作为请求头

比如在main.js文件当中——

//main.js
axios.interceptors.request.use(
    (config) => {
      const token = localStorage.getItem('jwt');
      if (token) {
        config.headers.token = `${token}`;//注意看后端是不是只认token
      }
      return config;
    },
  );
  • getItem即为获取浏览器里面之前存储过的键为jwt的值
  • header.token是指在每次请求里面的header里面的token里面的值(实际开发中可能采取其他形式的命名)

解码令牌内信息

可以写一个工具函数(在此仅供参考)

export default decodeJWT2Obj;

function decodeJWT2Obj(token) {
    const parts = token.split('.');
    const header = atob(parts[0]);
    const payload = atob(parts[1]);
    return {
        header: JSON.parse(header),
        payload: JSON.parse(payload)
    }
}

标签:令牌,const,JWT,jwt,token,Vue3,data,response
From: https://blog.csdn.net/Prelude4/article/details/140793741

相关文章

  • vue3 封装request请求
    vue3原生请求封装我这里用一个案例来解释需求:把vue3原生的静态页集成到vue2的若依项目并且可以访问vue2接口在vue3src下的utils下创建文件request.ts文件importaxiosfrom"axios";import{showMessage}from"./status";//引入状态码import{ElMess......
  • vue3写pdf文档预览和下载
    1.实现效果:文件列表点击pdf文档可预览,含多页,带下载按钮 2. 用的vue3+vue-pdf-embed版本号可用1.x或2.x:这里我用的1.2.1版本:"vue-pdf-embed":"1.2.1"//安装:[email protected] vue-pdf-embed官方文档:2.0.0版本:https://www.npmjs.com/packa......
  • Vue3的学习---3
    3.Vue进阶3.1Vue方法、计算属性及监听器3.1.1computed计算属性computed用于定义计算属性,计算属性是基于他们的依赖关系进行缓存的,只有当依赖的数据发生变化时,计算属性才会重新计算。数据不发生变化:<body><divid="app">{{msg}}<br>{{r......
  • vue3中使用keepAlive缓存路由组件不生效的问题解决
    在Vue3中使用keep-alive缓存路由组件时,可能会遇到一些问题导致缓存不生效。以下是一些常见的问题及其解决方案:keep-alive写法错误:在Vue3中,使用keep-alive需要将router-view包裹在keep-alive中,并通过插槽传递组件。例如:<template><router-viewv-slot="{Co......
  • js vue3 vue2鼠标单击事件复制指定内容到粘贴板
    借助原生JavaScript的 navigator.clipboard.writeText() 方法来时(要求页面是在用户交互的上下文中,比如点击事件处理程序中调用)如:点击列表的复制按钮,得到指定列(data)的值到粘贴板<template><div><button@click="click">复制文本</button></div></templ......
  • Vue3-如何自己写一个“返回顶部”功能
    功能描述:在屏幕的右下角固定一个“返回顶部”按钮,只有当用户滚动屏幕一定程度后出现,否则隐藏。点击按钮,网页平滑的滚动到页面顶部。环境:Vue3,js,antd具体思路:1、给窗口挂载滚动事件,监听视口的滚动,当滚动距离超出设定阈值后,出现按钮。2、点击按钮,滚动窗口。具体代码:<tem......
  • Vue3 - 最新详细实现安装使用 Google 谷歌地图教程,提供搜索城市名称及地点(搜索关键字
    前言如果您需要Vue2版本,请访问这篇文章。在vue3|nuxt3网站开发中,详解实现接入谷歌google地图申请密钥及相关配置完整流程,附带使用谷歌地图相关功能示例代码,支持地图渲染展示、在地图上标点、全球地图搜索及搜索框相关联想关键词、地图导航、用户当前位置经纬度......
  • 70%的人都答错了的面试题,vue3的ref是如何实现响应式的?
    前言最近在我的vue源码交流群有位面试官分享了一道他的面试题:vue3的ref是如何实现响应式的?下面有不少小伙伴回答的是Proxy,其实这些小伙伴只回答对了一半。当ref接收的是一个对象时确实是依靠Proxy去实现响应式的。但是ref还可以接收 string、number 或 boolean 这样的......
  • Vue3 实现国际化
    什么是前端国际化?国际化是做框架,帮助快速实施本地化。框架的设计实现决定了进行本地化的效率与质量。那什么是本地化?本地化就是在特定语言文化下,使产品能服务当地客户的使用习惯,总的来说,就是为一个系统提供不同语言的切换。国际化实现原理我们需要提供不同语言的资源包......
  • 在课堂上使用 JWT 令牌编写 pytest
    我有一个类TestSecured,其中有一些方法可以获取受保护的端点,因此您需要一个jwt来发出请求。我正在尝试优化我的测试类,这样我就不需要登录过程3次,而只需要1次,并在我的3个测试方法中使用相同的令牌。@pytest.mark.usefixtures("client","auth","setup_user_and......