VIP用户交流群:462197261 收藏本站北冥有鱼 互联网前沿资源第一站 助力全行业互联网+
在线客服:78895949
tonglan
  • 当前位置:
  • express + jwt + postMan验证实现持久化登录

    原理

    第一次登陆时会返回一个经过加密的token,下一次访问接口(携带登录返回你的token)的时候,会对token进行解密,如果解密正在进行,说明你已经登录,再把过期时间延长

    下载

    npm init -y // 一键初始化
    npm install express -s // 下载express
    npm install cors // 跨域中间件
    npm install body-parser // body-parser中间件 解析带请求体的数据(post,put)
    npm install jsonwebtoken // 持久化登录 jwt json web token

    基本配置

    // 引入express
    let express = require('express')
    let cors = require('cors')
    let bodyParser = require('body-parser')
    let jwt = require("jsonwebtoken")
    
    let banner = require("./banner")
    
    // 拿到服务器
    let app = express()
    
    app.use(cors())
    app.use(bodyParser.json())
    app.use(bodyParser.urlencoded({extended:false}))
    
    // listen 后面跟着的是端口
    app.listen(8000,function(){
     console.log('OK')
    })

    模拟一个登陆的接口

    app.post('/login',function(req,res){
     let {username} = req.body
     console.log(username)
     res.json({
      // 进行加密的方法
      // sing 参数一:加密的对象 参数二:加密的规则 参数三:对象
      token:jwt.sign({username:username},'abcd',{
       // 过期时间
       expiresIn:"1h"
      }),
      username,
      code:200
     })
    })

    postMan模拟 发送POST请求

    接收到数据

    得到token

    登录持久化验证

    把 token 写入header

    // 登录持久化验证接口 访问这个接口的时候 一定要访问token(前端页面每切换一次,就访问一下这个接口,问一下我有没有登录/登陆过期)
    // 先访问登录接口,得到token,在访问这个,看是否成功
    app.post('/validate',function(req,res){
     // 访问 token
     let token = req.headers.authorization;
     // console.log(token)
     // 验证token合法性 对token进行解码,解码方式要和加密方式一样
     jwt.verify(token,'abcd',function(err,decode){
      if(err){
       res.json({
        msg:'当前用户未登录'
       })
      }else {
       // 证明用户已经登录
       res.json({
        username:decode.username,
        msg:'已登录'
       })
       token:jwt.sign({username:decode.username},'abcd',{
        // 过期时间
        expiresIn:"1h"
       })
      }
     })
    })

    已有登录账号,持久化登录成功

    设置登录过期时间

    token:jwt.sign({username:decode.username},'abcd',{
     // 如果过期时间为1秒
     expiresIn:"1s"
    })

    获得 token

    设置头部信息

    验证 过期时间生效

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持北冥有鱼。

    您可能感兴趣的文章:

    • vue+express+jwt持久化登录的方法
    • express框架中使用jwt实现验证的方法

    广而告之:
    热门推荐:
    php的zip解压缩类pclzip使用示例

    PclZip简介PclZip是一个很强大的压缩与解压缩zip文件的PHP类,PclZip library能够压缩与解压缩Zip格式的压缩档(WinZip、PKZIP);且能对此类类档案进行处理,包括产生压缩档、列出压缩档的内容以及解压缩档案等等。 简单、易用、强大是我对它的评价。 最近在开发我的Wor···

    PHP json

    一、函数简介1、此函数有四个参数,一般在使用时会用到前两个,具体的参数可以看手册。 2、第一个参数是json格式的字符串,第二个参数是boolean值(false转化成对象,true转化成数组,默认false),如果转化失败返回null。 二、遇到的问题在项目中调用了java写的一个web服···

    Vue常用的几个指令附完整案例

    越来越多的人在用Vue,刚开始接触vue的话常接触的指令就几个,统一归纳一下,做个demo演示。 指令 v-text v-html v-bind v-on v-model v-for 代码 学习技术最好还是要看下代码是什么样的。 v-text 解释:更新DOM对象的 textContent <h1 v-text="msg"></h1> v-htm···

    DEDE整站动态化或整站静态化设置方法,织梦栏目批量静态/动态方法

    织梦58建站接到一个朋友提问,100多各栏目全部要从动态变成静态,里面的文章也要静态化,如何更快捷的设置dede的静态化或者动态化呢? 直接用DEDE后台的SQL命令行工具, SQL语句: DEDE整站动态化: 将所有文档设置为“仅动态”, update dede_archives s···

    vue路由插件之vue-route

    vue路由插件,vuer Router,使vue官方的路由管理其,和vue高度耦合   1.vue-Router的使用   import Vue from 'vue' import Router from 'vue-router' //引入路由组件 Vue.use(Router) new Router({ mode: 'history', //路由的两种模式 hash 和history 默认使history模···

    php+ajax实现无刷新文件上传功能(ajaxuploadfile)

    本文实例为大家分享了php+ajax实现无刷新文件上传的具体代码,供大家参考,具体内容如下 文件上传的表单格式 <form id="uploadform" enctype="multipart/form-data" name="uploadform" method="post" > <input id="fileToUpload" type="file" name="fileToUpload···

    利用node.js实现反向代理的方法详解

    本文主要给大家介绍的是关于利用node.js实现反向代理的相关内容,分享出供大家参考学习,下面话不多说,来一起看看详细的介绍: 跨域问题是前端开发很常见的问题解决方案有很多种 jsonp返回 Access-Control-Allow-Origin:'*' (需要注意的是 对于post请求会变成option请求需求···

    PHP实现对二维数组某个键排序的方法

    本文实例讲述了PHP实现对二维数组某个键排序的方法。分享给大家供大家参考,具体如下: /** * 对查询结果集进行排序 * @access public * @param array $list 查询结果 * @param string $field 排序的字段名 * @param string $sortby 排序类型 (asc正向排序 desc逆向排序···

    迁移PHP版本到PHP7

    今天看到微博上说phpng也就是php7合并到master上了,大家都知道我是比较喜欢探讨最新版本的东西,看看有什么特性,我就忍不住升级去了,以前我的PHP版本是5.5.19,然后我就开始了。 复制代码 代码如下: yum install git git clone https://github.com/php/php-src.git  ···

    socket.io 和canvas 实现的共享画板功能

    起初只是想要写个简单的画板,后面不知不觉的想起石墨文档有一个白板功能,就想将当前这个画布功能,开发成一个简易版的协作画板。 在线演示:努力部署中,目前需要clone到本地运行。 git 地址 2、运行   git clone <repository> npm install #>>>对于开···