nodejs 中 token 的使用

news/2024/7/10 0:23:38 标签: 中间件, nodejs, vue, jwt, token

前言

token 验证,在设计登录注册和一些权限接口时发挥作用。以nodejs为例,谈一谈jsonwebtoken的使用。

正文

一. 安装

$ token function">npm i jsonwebtoken

二. 使用

  1. 首先,需要提供一个密匙,也就是一个字符串,用于token的生成和验证。这个密匙一般会声明为全局变量,也就是在启动文件app.js中,方便在各个路由板块中共同使用。
token comment">//将变量挂载到app上,app.get是取变量
apptoken punctuation">.token keyword">settoken punctuation">(token string">'secret'token punctuation">, token string">'zedhello99'token punctuation">)
  1. 在路由文件中,引入jsonwebtoken模块以及密匙
token keyword">const jwToken token operator">= token function">requiretoken punctuation">(token string">'jsonwebtoken'token punctuation">)
token keyword">const secret token operator">= apptoken punctuation">.token keyword">gettoken punctuation">(token string">'secret'token punctuation">)
  1. 生成token,根据用户的id或是其它信息,以及密匙,来生成token并发送给前端。
token token operator">= jwTokentoken punctuation">.token function">signtoken punctuation">(token punctuation">{_idtoken punctuation">: usertoken punctuation">._idtoken punctuation">}token punctuation">, secrettoken punctuation">)
  1. 编写一个中间件函数,来判断token是否存在,以及格式是否合法。
    PS:前端发来的验证信息,格式应该为Bearer ${token}
token keyword">const token function-variable function">verifyToken token operator">= token punctuation">(reqtoken punctuation">, restoken punctuation">, nexttoken punctuation">) token operator">=> token punctuation">{
    token keyword">const bearerHeader token operator">= reqtoken punctuation">.headerstoken punctuation">.authorization

    token keyword">if token punctuation">(token keyword">typeof bearerHeader token operator">!== token string">'undefined'token punctuation">) token punctuation">{
        reqtoken punctuation">.token token operator">= bearerHeadertoken punctuation">.token function">splittoken punctuation">(token string">' 'token punctuation">)token punctuation">[token number">1token punctuation">]
        token function">nexttoken punctuation">(token punctuation">)
    token punctuation">} token keyword">else token punctuation">{
        restoken punctuation">.token function">statustoken punctuation">(token number">401token punctuation">)token punctuation">.token function">sendtoken punctuation">(token punctuation">{
            messagetoken punctuation">: token string">'请先登录'
        token punctuation">}token punctuation">)
    token punctuation">}
token punctuation">}
  1. 在用到token验证的接口,加入中间件函数,并且调用模块方法verify验证token是否正确
 routertoken punctuation">.token function">posttoken punctuation">(token string">'/logout'token punctuation">, verifyTokentoken punctuation">, token punctuation">(reqtoken punctuation">, restoken punctuation">) token operator">=> token punctuation">{
        jwTokentoken punctuation">.token function">verifytoken punctuation">(reqtoken punctuation">.tokentoken punctuation">, secrettoken punctuation">, token punctuation">(errtoken punctuation">, datatoken punctuation">) token operator">=> token punctuation">{
            token keyword">if token punctuation">(token operator">!errtoken punctuation">) token punctuation">{
            	token comment">//token正确,做些事情
                restoken punctuation">.token function">jsontoken punctuation">(token punctuation">{messagetoken punctuation">: token string">'退出登录'token punctuation">, datatoken punctuation">}token punctuation">)
            token punctuation">} token keyword">elsetoken punctuation">{
            	token comment">//token不正确,返回401
            	restoken punctuation">.token function">statustoken punctuation">(token number">401token punctuation">)token punctuation">.token function">sendtoken punctuation">(token punctuation">)
            token punctuation">}
        token punctuation">}token punctuation">)
    token punctuation">}token punctuation">)
  1. 一个需要token验证的接口,需要前端和后端的双重验证,来保证接口的安全性。若前端使用vue,则在导航守卫中判断token状态。

结语

如果对你有帮助的话,请点一个赞吧


http://www.niftyadmin.cn/n/1257935.html

相关文章

JavaScript前端面试题整理

前言 本博客部分题目来自B站UP主峰华前端工程师 笔者觉得有些题目不错,记录一下。 正文 运行结果是? const a (b)>{return b instanceof Function ? b() : b }console.log(a) console.log(a(()>hello)) console.log(a(world)). . . . . . …

前端工作周报

实习期,记录一些工作中遇到的问题 正文 一. 关于watch 更新列表的话,就用watch监听变化的部分,不要再变动之后的callback中逐一处理,如在增加或删除列表项时,再给本地列表进行加减,笨方法。watch监听的越…

element tab选项卡标签样式

前言 今天工作时有一个需求,大致是把elementUI的选项卡标签样式修改修改。起初是想直接重写element样式类,但是需求中还需对标签中的数字特殊处理,这种方式就行不通了。百度找了很久,终于在一个偏僻的角落找到了答案。 正文 使…

JavaScript两个数组的数据处理

来自思否的一个问答。 原文链接 正文 问题 提问者大概需求为将下面的两个数组,经过处理后变为预期的数组 原数组 const arr1 [{ uid: 2 }, { uid: 3 }, { uid: 4 }]; const arr2 [{text: 随便1,children: [{ uid: 1 }, { uid: 2 }],},{text: 随便2,children: …

MySQL、Oracle和SQL Server的分页查询语句

原文地址:http://www.cnblogs.com/ginponson/p/5746435.html 假设当前是第PageNo页,每页有PageSize条记录,现在分别用Mysql、Oracle和SQL Server分页查询student表。 1.Mysql的分页查询 SELECT * FROM student LIMIT (PageNo - 1) * PageSi…

List 中去除 null 方法讨论

先看下面的程序段&#xff1a; public static void main(String[] args) { List<Integer> arrays new ArrayList<Integer>(); arrays.add(2); arrays.add(null); arrays.add(456); arrays.add(null); arrays.add(789); System.out.println(arrays); } …

前端工作周报8.2

记录工作中的收获 正文 1. 样式问题 文字超出容器显示省略号&#xff0c;必须设置三个属性&#xff1a; white-space: nowrap; text-overflow: ellipsis; overflow: hidden;除此之外&#xff0c;容器的display需为block/inline-block Margin负值不生效的话&#xff0c;考虑…

Python字符串基本操作

Python字符串基本操作 1、判断是不是合法的标识符isidentifier name"ABC" print(name.isidentifier()) 打印结果 True 2、首字母大写capitalize name abc print(name.capitalize()) 打印结果 Abc 3、计数count name abc print(name.count("a")) 打印结果 1…