【问题标题】:AdonisJS Error Code "EBADCSRFTOKEN" in Postman in PUT,POST,DELETE operation在 PUT、POST、DELETE 操作中 Postman 中的 AdonisJS 错误代码“EBADCSRFTOKEN”
【发布时间】:2019-12-18 11:57:10
【问题描述】:

我在 AdoniJs 中创建了 REST API。在此,我使用 GET、POST、PUT 和 DELETE 方法为 CRUD 操作创建了 API 端点。我使用shieldjs 作为中间件来验证CSRF 令牌。我正在从 Postman 进行 API 调用。

首先,我调用 API 的 GET 方法,并正确获取了预期数据和 3 个 cookie 作为响应的一部分,其中一个是 XSRF-TOKEN

但是,当我通过在请求标头中的 cookie 中将键 X-XSRF-TOKEN 设置为 XSRF-TOKEN 的值来调用 PUT、POST 和 DELETE 方法时,我收到错误 EBADCSRFTOKEN 作为 Postman 的响应。

shield.js文件中ShieldJS中CSRF的配置

csrf: {
    enable: true,
    methods: ['POST', 'PUT', 'DELETE'],
    filterUris: [],
    cookieOptions: {
      httpOnly: false,
      sameSite: true,
      path: '/',
      maxAge: 7200
    }
}

handler.js 文件中的错误处理程序代码

async handle (error, {request, response }) {
    if (error.code === 'EBADCSRFTOKEN') {
        response.forbidden(error.code)
        return
    }
}

当我在 ShieldJs 中将 enable: false 的值更改为 csrf 时,它工作正常,但在我执行 enable: true 之后,我收到错误 EBADCSRFTOKEN

我在发送xsrf 令牌时不应收到此错误代码。

【问题讨论】:

    标签: adonis.js


    【解决方案1】:

    像这样将 filterUris 放在你的路由路径中

    csrf: {
        enable: true,
        methods: ['POST', 'PUT', 'DELETE'],
        filterUris: ['/firstroute','*',],
        cookieOptions: {
          httpOnly: false,
          sameSite: true,
          path: '/',
          maxAge: 7200
        }
      }
    

    更多关于 csrf 的信息请访问此网站adonisjs


    第二种方式是

    • 创建 REST API 项目。创建 API 时不需要视图。未获取 csrftoken 时会生成此错误。 所以你可以尝试为唯一的 API 创建一个项目,不包括这样的视图 adonis new projectname --api-only

    更多信息请关注link 如何创建 API 项目。

    【讨论】:

    • 我尝试了您的解决方案。添加了filterUris: ['/users/:id', '/users',],现在我的应用程序可以正常工作了。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-02
    • 2022-10-13
    • 1970-01-01
    • 2012-01-20
    • 2014-12-05
    • 2018-05-23
    • 2014-08-10
    相关资源
    最近更新 更多