token的生成与验证

2023-11-11

写在前面,最近在写自己毕业的东西。由于采用的是前后端分离的写法。为了方便写使用的是跨域的模式。所以cookie、session就不好用了。所以记录一下token吧。夜太深了,就简单写一下用法吧(官方文档写的很全了)

使用场景:用户成功登陆之后,返回客户端相应数据的同时。生成token一并返回

1. 生成

安装第三方模块:npm install jsonwebtoken
导入的话就不用说了吧。

其实最主要的就是用到了jwt的sign方法。
sign(“规则”,“加密的名字(这个可随便)”,回调。(其中回调参数中的token即生成的))

代码如下:在验证密码正确之后。生成token,便返回到客户端

// @route  POST /admin
// @desc   返回的请求的json数据
// @access public
admin.post('/', async(req, res) => {
    // 预处理一下
    const { username, password } = req.body;
    console.log(req.body);


    if (username.trim() == '' || password.trim() == '') {
        res.send("输入的用户名或密码不能为空");

    }
    // 验证用户信息
    let user = await User.findOne({ username });
    if (user) {
        if (password == user.password) {
            // 创建jwt规则
            const rule = {
                id: user.id,
                name: user.name
            }
            jwt.sign(rule, "secret", { expiresIn: 3600 }, (err, token) => {
                if (err) throw err;

                res.json({
                    msg: 'success',
                    token: 'Bearer ' + token
                });

            });
            // res.json({ msg: "success" })
        } else {
            res.status(400).json({ msg: "用户名或密码错误" })
        }


    } else {

        res.status(400).send({ "msg": "用户名或密码错误" })
    }
});

查看该接口返回结果:
在这里插入图片描述

2. 验证

验证要用到俩个模块。
安装命令:1 npm install passport-jwt 2 npm install passport

  • passport需要对所有链接做处理,故先要在node的入门文件我的为app.js文件中导入并做如下处理。
    app.use(passport.initialize());
  • 新建passport.js(需在app.js导入)
  • 先来看一眼官方文档
    在这里插入图片描述
    passport.js仿照便可以了
    我的代码:
const JwtStrategy = require('passport-jwt').Strategy,
    ExtractJwt = require('passport-jwt').ExtractJwt;
const { User } = require('../model/adminUser');
const opts = {}
opts.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken();

opts.secretOrKey = 'secret';
//向外暴露一个方法
module.exports = passport => {
    passport.use(new JwtStrategy(opts, async(jwt_payload, done) => {
        const user = await User.findById(jwt_payload.id);
        if (user) {
            return done(null, user);
        }else{
            return done(null,false);
        }
    }));
};

3. 写一个只有用token才能访问的接口测试一下吧

// @route  POST /admin/demo
// @desc   get
// @access priate

admin.get('/demo', passport.authenticate("jwt", { session: false }), (req, res) => {
    res.json({
        id: req.user.id,
        name: req.user.username
    });
});

验证接口
不拿token访问时:
在这里插入图片描述
拿了token时:
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

token的生成与验证 的相关文章

  • 节点无法抓取某些页面

    我不知道这是否与冷融合页面有关 但我无法刮掉这些 cfm pages 在目录中的命令行中request run node gt var request require request node gt var url http linguis
  • NestJS e2e 测试模拟会话装饰器

    我正在尝试使用 supertest 编写一个 e2e 测试 其中我的控制器实际上使用了 Session 装饰师 然而 我不想承担使用数据库连接等启动会话的全部负担 因此测试中的我的应用程序实际上并未初始化会话 相反 我想首先模拟掉装饰器提供
  • nodemon 安装错误“没有可用于超时的有效版本”

    尝试在全新的节点项目中安装 nodemon 时出现此错误 我创建了一个名为 my project 的空白文件夹 然后 在其中 我执行了创建一个 package json 文件 npm init f 然后当尝试运行时 npm install
  • NodeJS hmac 摘要问题与重音

    我正在对以下代码与 Ruby PHP 和 NodeJS 进行并排比较 使用 NodeJS 得到错误的响应crypto module PHP hash hmac sha256 text Ruby OpenSSL HMAC hexdigest
  • 如何使用Create React App安装React

    嗨 我对反应真的很陌生 我不知道如何实际安装它 也不知道我需要做什么才能在其中编写代码 我下载了node js并且安装了v12 18 3以及NPM 6 14 6 但是每次我尝试在许多网站上提到的create react app安装方法中输入
  • 下载中带有文件名的 NodeJS sendFile

    我尝试使用以下代码将文件发送给客户端 router get get myfile function req res next res sendFile other file name dat 它工作正常 但当用户从以下网址下载此文件时我需要
  • Node.js 和 Passport 对象没有 validPassword 方法

    我正在使用 Node js Express Passport 创建一个简单的身份验证 本地 到目前为止我所达到的效果是 当输入错误的用户名或密码时 用户将被重定向到错误页面 但是当用户输入正确的用户名和密码时 我收到此错误 node mod
  • 如何使用remark将markdown解析为json

    The 备注站点 https remark js org 有一个 AST 浏览器的链接 用于输出备注 https astexplorer net gist 0a92bbf654aca4fdfb3f139254cf0bad ffe102014
  • 我在 MacBook M1 max 中的 nodejs 连接到数据库 oracle 时遇到问题帮助我

    Node js 中的错误消息 nodemon 启动node server js错误 错误 DPI 1047 无法找到 64 位 Oracle 客户端库 dlopen Users pitidev ldb Downloads instantcl
  • 如何使用对象数组创建猫鼬模式

    我有这个 json data id 1 name Sample test description this is a sample test category tests points 100 startDate 2018 02 15 00
  • 在heroku上部署时出错,/bin/sh: 1: webpack: not found

    这是我在 heroku 网站上手动部署时遇到的错误 首先 我在 json 文件中遇到错误 因此我指定了正在运行的 npm yarn 和 node 版本 这些错误似乎已经清除 现在我就是这样的人 并且已经搜索了谷歌 但似乎找不到太多关于修复它
  • 未捕获的错误:找不到模块“jquery”

    我在用Electron https github com atom electron制作桌面应用程序 在我的应用程序中 我正在加载一个外部站点 Atom 应用程序之外 可以说http mydummysite index html http
  • 查询为空 Node Js Sequelize

    我正在尝试更新 Node js 应用程序中的数据 我和邮递员测试过 我的开发步骤是 从数据库 MySQL 获取ID为10的数据进行更新 gt gt 未处理的拒绝SequelizeDatabaseError 查询为空 我认识到 我使用了错误的
  • 建立 TCP 连接边界的正确方法

    我的问题是关于如何正确处理使用 tcp 连接接收的数据 事实上 通过建立 tcp 连接 创建了一个流 假设我想发送一条有开头和结尾的消息 由于数据在流中流动而没有指定任何边界 我如何识别消息的开始和结束 我想在消息的开头和结尾处放置一些特殊
  • NodeJs 永远无法在 ubuntu 服务器中工作

    我安装了forever https www npmjs org package forever作为超级用户在我的 ubuntu 服务器中全局使用 npm 模块 但我无法使用它启动我的nodeJs 应用程序 我在终端中输入 永远 但似乎没有执
  • JavaScript 中的“REPL”是什么? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我看到了创建 REPL 的参考 什么
  • Phonegap使用命令行工具添加插件

    我是phonegap的新手 我按照phonegap官方网站中定义的步骤使用命令行工具创建项目 nodejs 我成功创建项目并添加平台 但是 当我尝试添加插件时出现以下错误 命令 cordova plugin add https git wi
  • node.js 安装向导提前结束

    我无法安装 node js 0 8 9 我是通过安装向导完成的 每次安装结束时我都会收到消息 Node js 安装向导提前结束 会是什么呢 谢谢 这可能会对将来的某人有所帮助 我从安装程序中收到类似的消息 发现我可以转到命令提示符并使用命令
  • Node + Express 会话过期?

    我有一个 Express 应用程序 并且有一个登录表单 我需要持续 1 个月的会话 我是否将 maxAge 设置为一个月 以毫秒为单位 我让两台计算机保持打开状态并登录了 24 小时 当我回来时 两台计算机都已注销 我该如何解决这个问题 实
  • 尝试将 Firebase 版本回滚到 2.X

    我最近更新到了新的 Firebase 3 但不幸的是 据我所知 它目前不支持 Geofire 查询 这对我的应用程序很重要 我已经将应用程序中的其他所有内容都转为使用 Firebase 2 但是当我尝试时要将我的应用程序部署到 fireba

随机推荐

  • 电子游戏,一个价值千亿美元的机会

    如果元宇宙确实是互联网的继承者 那么说它的 前辈 来自电子游戏行业似乎很奇怪 毕竟 到目前为止 互联网与电子游戏行业的发展轨迹是完全不同的 互联网起源于政府的研究实验室和大学 后来 它逐渐扩展到企业 然后是中小企业 最后才是消费者 娱乐业可
  • 数据库事务(Database Transaction)

    数据库事务 Database Transaction 数据库事务 Database Transaction 是由一系列对系统中数据进行访问与更新的操作所组成的一个程序执行逻辑单元 一个数据库事务通常包含了一个序列的对数据库的读 写操作 它的
  • 12个Flex常用功能代码

    12个Flex常用功能代码 1 复制内容到系统剪贴板 1 System setClipboard strContent 2 复制一个ArrayCollection 1 dummy solution well it works 2 var b
  • ubuntu下配置vim

    1 安装vim sudo apt get install vim full2 配置文件的位置在目录 etc vim下面 有个名为vimrc的文件 这是系统中公共的vim配置文件 对所有用户都有效 3 设置语法高亮显示1 打开vimrc 添加
  • DLNA介绍(包括UPnP,2011/6/20 更新)

    这部分的内容大多来源于网络及官方文档 按照自己的翻译理解整理所成 东西比较多 从头慢慢看还是可以懂个大概的 目录 一 DNLA的建立 二 DLNA的成员 三 DLNA标准的制定 四 DLNA的设备 五 DLNA的架构 六 云时代的数字家庭
  • Python中列表、字典、元组、集合数据结构整理

    这篇文章主要介绍了Python中列表 字典 元组 集合数据结构整理 较为详细的分析了这几类数据结构的具体用法及相关技巧 需要的朋友可以参考下 本文详细归纳整理了Python中列表 字典 元组 集合数据结构 分享给大家供大家参考 具体分析如下
  • 518. 零钱兑换 II -- 完全背包

    518 零钱兑换 II 这道题其实就是一个完全背包问题 关于背包问题的相关文章见 01背包问题 动态规划 完全背包问题 class CoinChange 完全背包 518 零钱兑换 II https leetcode cn problems
  • Android Automotive-sensor服务详解

    本章将会详细介绍Android原生车辆服务的传感器处理流程 同时还会介绍Mananger lt lt gt gt Service之间数据传输协议 即Manager如何与Service进行交互 Car Sensor数据传递时序 车辆控制之Se
  • 二分查找(Binary Search) 常见问题解决方法总结

    缘由 今天浏览 何登成的技术博客 无意中发现了写的blog 二分查找 Binary Search 需要注意的问题 以及在数据库内核中的实现 随想总结下二分查找的常见问题 问题背景 今年的实习生招聘考试 我出了一道二分查找 Binary Se
  • Vue2安装Vuex报错:npm ERR code ERESOLVE npm ERR ERESOLVE unable to resolve dependency tree.

    Vue2安装Vuex报错 npm ERR code ERESOLVE npm ERR ERESOLVE unable to resolve dependency tree
  • 职场新人入门指南(干货)

    目录 报联商 如何写一封邮件 最简单的时间管理方法 文件管理方法 职场新人必懂的潜规则 细节展现潜力 处处留心皆学问 Excel常用操作 新人需要学习的文职工作法宝 流程图 快速掌握的工具 搜索引擎的正确使用方法 十个帮你成长的网站 行业大
  • 33 openEuler使用LVM管理硬盘-管理逻辑卷

    文章目录 33 openEuler使用LVM管理硬盘 管理逻辑卷 33 1 创建逻辑卷 33 2 查看逻辑卷 33 3 调整逻辑卷大小 33 4 扩展逻辑卷 33 5 收缩逻辑卷 33 6 删除逻辑卷 33 openEuler使用LVM管理
  • 三菱M80操作介绍_三菱数控系统#6451参数引起的通信故障案例

    三菱E60系统故障案例 关于 6451参数引起的通信故障案例 故障1现象 在传送PLC 程序时中途中断 断电后 重新设定 6451 00110000 屏幕立即变为灰屏 只有将 6451 00010000 屏幕又恢复正常 将系统做维修格式化
  • react 中样式写法

    方式一 行内样式 优点 基于内联样式书写的样式肯定不会导致样式冲突 可以动态获取state中的状态来完成动态样式 缺点 采用小驼峰写法 有的css书写没有提示易错 在JSX中写大量的style样式 比较混乱 伪类 伪元素这种样式无法通过内联
  • pandas添加新列的5种常见方法

    前言 pandas为DataFrame格式数据添加新列的方法非常简单 只需要新建一个列索引 再为其赋值即可 以下总结了5种常见添加新列的方法 首先 创建一个DataFrame结构数据 作为数据举例 1 2 3 4 5 6 importpan
  • ros多机联调ROS md5sums do not match问题记录

    树莓派3b 上运行roscore 与pc端虚拟机上的ros联通 树莓派上运行一个AddTwoInts的服务节点 在pc端虚拟机上调用该服务 出现md5sums do not match的错误导致调用失败 后来发现是因为两边的 srv的数据类
  • spring03——用注解实现控制反转

    之前用xml文件配置也可实现控制反转 但注解方式更为方便 1 拷贝jar包 2 创建源路径包 3 配置applicationContext xml文件
  • mina服务器学习

    http bsr1983 iteye com blog 1880134
  • IDEA+Maven的JAVA开发环境配置

    本文记录了在windows上配置Hadoop Java开发环境的全过程 本次实验使用系统为Win10 其中Maven的安装位置为D 程序文件 源代码 Java apache maven 3 8 4 bin apache maven 3 8
  • token的生成与验证

    写在前面 最近在写自己毕业的东西 由于采用的是前后端分离的写法 为了方便写使用的是跨域的模式 所以cookie session就不好用了 所以记录一下token吧 夜太深了 就简单写一下用法吧 官方文档写的很全了 使用场景 用户成功登陆之后