Egg框架搭建后端服务【5】- 接口token

这篇具有很好参考价值的文章主要介绍了Egg框架搭建后端服务【5】- 接口token。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

需求

后端服务提供的接口应该是有时限和权限的,所以一般通过 token 进行用户权限的校验。

开发

安装

通过 egg-jwt 插件生成 token。

npm i --save egg-jwt

配置

在 plugin.js 中配置 egg-jwt 插件。

module.exports = {
    jwt: {
        enable: true,
        package: 'egg-jwt'
    },
};

在 config.default.js 中设置 jwt 相关内容,同时因为部分接口不需要校验 token,故在此处同时设置白名单。

// 添加jwt的配置
config.jwt = {
	secret: 'Jian1',  // 加密密钥
	sign: {
		expiresIn: 60 * 60 * 24,  // 过期时间24小时
		algorithm: 'HS256'
	}
}

// 添加token白名单配置
config.tokenWhiteList = [
	'/login',
	'/verifyCode',
]

生成

生成 token 的动作一般在调用 login 接口的时候进行,通过 login 接口将 token 传递给前端,一般保存在 localStore 中。

const token = app.jwt.sign(params, app.config.jwt.secret);
ctx.state = 200;
ctx.body = {
	code: 200,
	success: true,
	data: {token: token},
	msg: '欢迎回来,' + userInfo.name,
	show: true	
}

校验

egg框架存在 中间件(middleware) 非常适合全局性质的拦截和校验。

创建 app/middleware/tokenAuth.js 文件。

module.exports = () => {
    return async function (ctx, next) {
        const requestUrl = ctx.request.url;

        if (ctx.app.config.tokenWhiteList.indexOf(requestUrl) > -1) {
            // 当前路由在白名单中
            await next();
            return;
        }

        const userToken = ctx.request.headers['authorization'].replace(/^Bearer\s+/, '');

        if (userToken) {
            try {
                ctx.app.jwt.verify(userToken, ctx.app.config.jwt.secret);
                await next();
            } catch (e) {
                ctx.status = 401;
                return ctx.body = {
                    code: 401,
                    msg: 'token错误'
                }
                return;
            }
        } else {
            ctx.status = 401;
            return ctx.body = {
                code: 401,
                msg: 'token不存在'
            }
            return;
        }
    }
}

总结

token 是比较重要的校验方式,但是需要注意的是常规来说:

前端传递 token 的时候需要加上 "Bearer "。

后端解析的时候需要去除 "Bearer "。

这里涉及到的其实是 W3C 的规范,请求头 Authorization 验证身份的时候遵守的格式是 Authorization: <type> <credentials>

  • type 是认证方式
  • credentials 是认证信息

注意:这里前端不增加 "Bearer " 也是可以调通的,但是加上最好,原因是框架使然。详情可以参阅官方文档。文章来源地址https://www.toymoban.com/news/detail-806613.html

到了这里,关于Egg框架搭建后端服务【5】- 接口token的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 页面生成图片或PDF node-egg

    没有特别的幸运,那么就特别的努力!!! 官方网址: node:https://nodejs.org/dist/v16.17.0/ egg: https://www.eggjs.org/zh-CN/ Puppeteer: https://zhaoqize.github.io/puppeteer-api-zh_CN/#/ 本次使用node版本:16.17.0 场景1: 比如全国有34个省份,每个省份文书模板不一样 场景2: 条件不一样,文书生成

    2024年02月14日
    浏览(43)
  • Egg - 中间件易错点和洋葱模型

    废话不多说,我给大家写个 Demo : 伪代码很简单,意思就是: 如果用户没有权限,返回一个固定的 Code 。 如果有权限则放行。 这段代码从语义上看其实并没有任何问题,用过 Egg 的小伙伴也知道, 给 ctx.body 对象赋值,也相当于给最终返回对象赋值。 但是这个代码却有着很

    2024年02月13日
    浏览(31)
  • 简化部署流程,提升开发效率:介绍 Electron Egg 打包优化

    在开发桌面应用程序时,优化打包流程是至关重要的,可以帮助开发人员节省时间和精力,提高生产力。本文将介绍如何使用 Electron Egg 框架进行打包优化,使得打包过程更加高效顺畅。 1. 预发布模式设置 在预发布环境下进行打包之前,我们需要先移动资源以确保打包过程顺

    2024年02月21日
    浏览(46)
  • 后端Springboot框架搭建APi接口开发(第一章)

    本文章以IDEA为开发工具,使用SSM框架进行项目编写 我们用一个简单的用户表进行操作演示 首先创建 Data 数据库 创建 User 数据表,表中包含 用户邮箱 , 用户姓名 , 用户密码 放点数据进去 打开IDEA,在右上角点击NewProject。创建新的项目 选择Spring Initializr框架,依次输入项目

    2023年04月08日
    浏览(44)
  • 探索 Electron Egg:构建跨平台桌面应用的理想选择

    随着Web技术的不断发展,构建跨平台桌面应用的需求也在逐渐增加。Electron Egg作为一个结合了Electron和Vue.js的框架,为开发者提供了一个简单而强大的工具,使他们能够快速构建出优秀的桌面应用。本文将介绍Electron Egg的核心特性、优势以及如何开始使用这个框架。 什么是

    2024年02月20日
    浏览(69)
  • 成功解决ERROR: No .egg-info directory found in C:\Users\admin\AppData\Local\Temp\pip-pip-egg-info

    由于最近在新电脑上使用python下载第三方库时经常遇到这个报错:ERROR: No .egg-info directory found in C:UsersadminAppDataLocalTemppip-pip-egg-info-XXXX。 为此,我尝试了把Libsite-packages中的除了pip外所有的文件夹都删除,然后再下载第三方库,这样操作确实不报错了,但又引发了新的问题

    2024年02月15日
    浏览(48)
  • 【解决】python setup.py egg_info did not run successfully

    在我使用 conda 安装fairseq 出现了如下问题 跟着报错改了很久也没用,随后发现原因出在conda身上。 不要使用conda,直接使用原生的python下载就好。

    2024年02月15日
    浏览(36)
  • 解决python setup.py egg_info did not run successfully.问题

    在安装pycurl库时遇到了这个问题: 在搜索之后猜测是不是版本不匹配问题,先升级了pip包: 再重新pip install pycurl还是不行,又尝试了以下命令: 这次可以了,成功安装pycurl库之后运行结果是这样的:  

    2024年04月26日
    浏览(33)
  • 解决报错:python setup.py egg_info did not run successfully

    记录一下安装detectron2过程的解决debug经验,报错如下,主要是python setup.py egg_info did not run successfully: 网上试了很多方法 最后通过下面的方法解决的 然后安装对应的步骤就可以了

    2024年02月16日
    浏览(45)
  • 解决pip报错“python setup.py egg_info did not run successfully.”

    网上有很多关于这个错误的文章,我想说的是这个报错本身什么也说明不了,因为真正有价值的报错是后面那一长串代码的报错信息。以我为例,我遇到的问题是: 这个报错显示在某某文件中,本该为str类型的对象实际上并非是str类型。因此我选择打开 File “D:anacondaenvs

    2024年02月16日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包