• token正确不报错,token失效后却出现报跨域错误


    1.今天在使用koajs开发项目时,突然发现前端配置axios的response获取不到后端定义的token失效内容了,取而代之的是出现了跨域的错误。

    2. 我马上去查找koajs的跨域中间件配置,发现配置完好cors,token正确时,接口正常访问,就确定不是跨域配置的问题

    3.于是我去查看该接口的路由。发现配置了中间件请求函数,用来解析token里面的用户信息和返回token的校验结果。(verifyToken为自定义的中间件函数)

    4.紧接着,我去getFirend函数中,打印请求值,发现根本没有接收到请求。因为我可以肯定,请求根本就没有到这个路由上来,在前面就已经被拦截了。

    5.我来到app.js初始函数,查看发现了我以前常常用的unless中间件

    1. app.use(
    2. jwt({ secret: config.jwt.secret }).unless({
    3. path: ["/api/login"],
    4. })
    5. );

     6.这段代码原有的作用,是对全局的请求路由一次性配置token校验,unless用于指定那些路由请求不需要进行JWT验证,其他所有没有定义的路由请求都将验证token,如果无效,请求会被拒绝,只有token正常,才能流转到下一个路由中间件和函数中。

    7.于是我马上在函数中添加了getFirend的路由,发现请求正常了,没有出现跨域了。

    8.到这里,我大概知道了问题所在,问题是app.use中的配置没有配置好,没有给返回数据,在app.use中处理token失效,然后返回给前端即可,原来问题这么简单,绕来绕去,人都傻了。

    1. app.use(async (ctx, next) => {
    2. try {
    3. ctx.params = {
    4. ...ctx.query,
    5. ...ctx.request.body,
    6. };
    7. await next();
    8. } catch (err) {
    9. if (err.status == "401") {
    10. err_body = {
    11. status: 200,
    12. body: "Token失效",
    13. };
    14. ctx.body = err_body;
    15. }
    16. }
    17. });

    9.这是nodejs中的koajs,至于nodejs,大家可以改造一下。 

  • 相关阅读:
    Java版企业工程管理系统源码 及 功能清单+Spring Cloud+Spring Boot+Mybatis
    电影推荐 - 亲密
    PostgreSQL — 安装及常用命令
    动态生成表格完整版(内含解析)
    一文知晓Linux文件权限
    嵌入式面试常见问题(四)
    termux安装以及基本配置
    postgresql_internals-14 记录
    网页报告不能直接转换成Word、PDF格式怎么办?Spire.doc控件可以轻松解决
    day4_C++
  • 原文地址:https://blog.csdn.net/CHENC0518/article/details/134075669