【jwt】使用jwt进行token的创建和验证(包括前后端)_创建jwtauthenticationtoken-程序员宅基地

技术标签: vue  

前言

用户访问网站时,都希望这一次登录完成后,下一次再访问时能够记住其登录的状态,而不是每一次进入都要重新进行登录。因此,本文记录了使用jwt来创建和验证token,以达到记住用户登录状态的过程

  • 前端:vue-cli3
  • 后端:node.js的express框架
  • jwt:jsonwebtoken

主要内容

后端

  1. 安装jwt

    npm install jsonwebtoken
    
  2. 封装创建和验证token的方法(server/utils/token.js)

    const jwt = require('jsonwebtoken');
    const Token = {
          
      encrypt:function(data,time){
           //data加密数据,time过期时间
        return jwt.sign(data, 'token', {
          expiresIn:time})
      },
      decrypt:function(token){
          
        if (!token) {
          
          return {
          
            token:false
          }
        }
        try {
          
          jwt.verify(token, 'token');
          return {
          
            token:true
          };
        } catch (e) {
          
          return {
          
            token:false,
            data:e
          }
        }
      }
    }
    module.exports = Token;
    
  3. 在登录接口中创建并返回token

    const Token = require('./utils/token');
    
    app.post('/user/login', function (req, res) {
          
          const token = Token.encrypt({
          id: req.user_id},'15d'); // 15d,有效期
          res.send({
          success: true, message: '登录成功', data:token});
    })
    
  4. 新建验证接口validate(前端可在app.vue中调用此接口进行验证)

    app.get('/validate', function (req, res) {
          
        let data = Token.decrypt(req.headers.token);  //将请求头的token取出解密
        if (data.token) {
          
            res.send('已经登录了');
        }else{
          
          res.send('还没登录呢');
        }
    })
    

前端

  1. 封装操作token的方法(client/utils/token.js)

    let setTokenToCookie = (value) => {
          
        var Days = 1; //此 cookie 将被保存 30 天
        var exp = new Date();
        exp.setTime(exp.getTime() + Days * 24 * 60 * 60 * 1000);
        document.cookie = 'my_token =' + escape(value) + ';expires=' + exp.toGMTString();
    }
    
    let getCookie = (name) => {
          
        var cookieValue = '';
        if (document.cookie && document.cookie !== '') {
          
            var cookies = document.cookie.split(';');
            for (var i = 0; i < cookies.length; i++) {
          
                var cookie = cookies[i].trim();
                if (cookie.substring(0, name.length + 1) === (name + '=')) {
          
                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                    break;
                }
            }
        }
        return cookieValue;
    }
    
    let clearCookie = () => {
          
        setTokenToCookie("");
    }
    
    export default {
          
        setTokenToCookie,
        getCookie,
        clearCookie
    };
    
  2. 配置axios请求拦截器,在请求头中携带该token(client/service/http.js)

    import Util from '../utils/token'
    
    axios.interceptors.request.use(function (conf) {
          
      const token = Util.getCookie('my_token');
      if (token) conf.headers['token'] = `${
            token}`;
      return conf;
    });
    
  3. 在app.vue中发起validate请求,若用户已经登录则跳转到首页,否则跳转 到登录页。

  4. 登录时,登录成功后接收到token,调用client/utils/token.js下的setTokenToCookie方法,将token存入cookie中。

  5. 退出登录时,调用client/utils/token.js下的clearCookie方法。

结语

整个大致的步骤就是这样。总结起来就是,前端发起登录请求,登录成功后端创建token并返回;前端将返回的token存储到cookie中,并在每一次请求时将token携带在请求头中,后端拿取请求头中的token进行验证。退出登录时,前端将cookie中的tokne置空。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39602178/article/details/105876059

智能推荐

windows安装kafka配置SASL-PLAIN安全认证_windows 安装 sasl-程序员宅基地

文章浏览阅读924次。confluent是平台化的工具,封装了kafka,让我们可以更方便的安装和使用监控kafka,作用类似于CDH对于Hadoop。confluent是由LinkedIn开发出的团队成员,基于这项技术创立了新公司ConfluentConfluent的产品也是围绕着Kafka做的。_windows 安装 sasl

云HIS住院业务模块常见问题及解决方案_his错误定义按领域划分设计方案-程序员宅基地

文章浏览阅读736次。基于云计算技术的B/S架构的医院管理系统(简称云HIS)_his错误定义按领域划分设计方案

2018 华为软件精英挑战赛-程序员宅基地

文章浏览阅读2.6k次,点赞2次,收藏4次。和室友一起参加了2018 华为软件精英挑战赛,现在来写写参赛感受吧。很遗憾,都没能进复赛,所以只参加了初赛,江山赛区64强,离进复赛只有一点点,当时江山和西北赛区还流传着,如果在其他赛区就可以进了,都是后话。写这个纯粹记录研究生生活吧。1、初赛赛题由于租户对ECS实例(虚拟机,VM)请求的行为具有一定规律,可以通过对历史ECS实例请求的分析,预测到未来一段时间的ECS实例请求,然后对预...

Qt 数据库 bindValue()使用方法-程序员宅基地

文章浏览阅读2w次,点赞4次,收藏33次。使用数据库时,有很多种添加数据到数据库的方法,我这里使用的是变量传递数据_bindvalue

VB.Net DataSet和DataTable_vs net dataset-程序员宅基地

文章浏览阅读2.5w次,点赞2次,收藏16次。在我们编写代码的时候从数据库里取出数据,填充到dataset里,再根据表的名字,实例化到 datatable 中。其实使用 dataset 相当于所使用数据库中数据的副本,保存在服务器的内存中。 ● 注意如下 ado.net 关系: Connection_____Command____DataAdapter____Dataset_vs net dataset

基于Matlab的数字水印设计——基于空域的水印处理系统-程序员宅基地

文章浏览阅读1.4k次,点赞4次,收藏24次。MATLAB数字水印处理系统【LSB,界面GUI】摘 要数字水印(Digital Watermarking)技术是我们生活中经常见到的信息隐藏技术。它将一些标识信息(即数字水印)直接嵌入数字载体中,但不影响原载体的使用价值,也不容易被人的知觉系统觉察或注意到。空间数字水印是信息隐藏技术的一个重要研究方向,另一类是频率数字水印。空间数字水印采用最低有效位(LSB)算法,通过修改表示数字图像的颜色或颜..._空域可逆水印篡改定位matlab

随便推点

SystemVerilog 断言:立即断言_systemverilog立即断言-程序员宅基地

文章浏览阅读139次。在 SystemVerilog 中,我们可以使用两种类型的断言:立即断言(Immediate Assertion)和并发断言(Concurrent Assertion)。如果条件为假,则断言失败,仿真停止,并将错误信息输出到仿真日志中。在每个时钟周期之后,我们使用立即断言来验证计数器的值是否按预期递增。如果断言失败,则会输出相应的错误消息,并停止仿真。通过使用断言,我们可以在仿真过程中验证设计的正确性,提高设计的可靠性和调试效率。通过使用立即断言,我们可以在仿真运行时实时检查设计的正确性。_systemverilog立即断言

ssh长时间不操作便断开_SSH连接服务器时,长时间不操作就会断开的解决方案-程序员宅基地

文章浏览阅读610次。最近在配置服务器相关内容时候,不同的事情导致长时间不操作,页面就断开了连接,不能操作,只能关闭窗口,最后通过以下命令解决。SSH连接linux时,长时间不操作就断开的解决方案:1、修改/etc/ssh/sshd_config文件,如果找到 ClientAliveInterval 0和ClientAliveCountMax 3并将注释符号("#")去掉,将ClientAliveInterval对应的..._三个小时无人 ssh就会断联

图解WinHex使用入门_please use latin characters-程序员宅基地

文章浏览阅读2.7w次,点赞15次,收藏86次。一 Winhex和相关概念简介1 Winhex是在Windows下运行的十六进制编辑软件,此软件功能非常强大,有完善的分区管理功能和文件管理功能,能自动分析分区链和文件簇链,能对硬盘进行不同方式不同程度的备份,甚至克隆整个硬盘;它能够编辑任何一种文件类型的二进制内容(用十六进制显示)其磁盘编辑器可以编辑物理磁盘或逻辑磁盘的任意扇区,是手工恢复数据的首选工具软件。2 数据恢复概念_please use latin characters

【SpringMVC】自定义拦截器和过滤器_springmvc添加过滤器-程序员宅基地

文章浏览阅读1.9k次。介绍SpringMVC如何使用自定义拦截器_springmvc添加过滤器

前端之VUE开发学习_vue前端开发-程序员宅基地

文章浏览阅读191次。前端之VUE开发学习(其实就是点理论,慢慢补充)。_vue前端开发

favicon.ico 网站小图标标识-程序员宅基地

文章浏览阅读252次。随便打开一个网页:比如http://www.baidu.com/可以看到在浏览器的标签头上面显示了一个图标,这个图标是:,也就是我们常说的favicon.ico.由于这篇文章主要讨论favicon.ico,以及各个浏览器对其的不同处理,所以还是新建web项目如下:home.html 代码如下:<!DOCTYPE html&g..._微信公众号favicon.ico报错

推荐文章

热门文章

相关标签