【问题标题】:Strapi API calling error: {"statusCode":403,"error":"Forbidden","message":"Forbidden"}Strapi API 调用错误:{"statusCode":403,"error":"Forbidden","message":"Forbidden"}
【发布时间】:2019-05-26 03:16:50
【问题描述】:

我正在使用 Strapi,但在调用 api 时出现错误 403 Forbidden,例如 http://localhost:1337/data

我调用了所有的 API,结果还是一样的 403 错误 我也用邮递员试过了。

在 api route.js 文件中我有这个:

 {
      "method": "GET",
      "path": "/data",
      "handler": "data.find",
      "config": {
        "policies": []
      }

Strapi 服务器是 localhost 端口:1337

来自浏览器的 GET 调用 http://localhost:1337/data

我在 mongodb 中有一个数据集合,它应该提供 json 文档 但它给了这个 错误:{"statusCode":403,"error":"Forbidden","message":"Forbidden"}

【问题讨论】:

    标签: strapi


    【解决方案1】:

    根据错误信息 MongoDB 与此无关。 你得到 403 这意味着这个 URL 的访问问题。 用户可能无权访问http://localhost:1337/data。 这是服务层问题

    【讨论】:

    • 我该如何解决?
    • 在调用该服务时提供有效的凭证/身份验证令牌。令牌应该有权访问该 URL
    • 我在哪里获得令牌,如何获得?
    • 如果您使用 Postman 或任何其他工具来休息服务,则可以选择在拨打电话或拨打电话时在标头中添加身份验证令牌(身份验证)从 javascript 调用我们可以在 headers 中发送令牌
    【解决方案2】:

    您是否通过“用户和权限”插件更新了您的安全规则?

    http://localhost:1337/admin/plugins/users-permissions/

    【讨论】:

    • 是的,我将其更新为公开,现在它正在工作,但请告诉我获取身份验证令牌的调用,以便我可以使用管理员凭据和令牌发送请求到访问 api
    • @Pierre 我正在使用 Frola 编辑器在管理面板中上传图像,我已经替换了默认编辑器,但它不会上传图像,除非文件上传插件设置为允许公开上传。如何只允许管理员上传?
    【解决方案3】:

    转到http://localhost:1337/admin/settings/users-permissions/roles,然后转到Public 角色并在Application 权限部分检查findone 和find,它将满足前端应用程序API 的需求。

    记住不要选择超过你需要的,它会公开给所有人,可能像chmod 777,但更糟。

    【讨论】:

    • 2021 确实回答:Strapi 版本 3.1.0-alpha.5 (node v12.18.1)
    【解决方案4】:

    2021 回答,每当您在 Strapi 中收到 403 错误时,总是与权限插件有关。您需要考虑您目前是什么类型的用户,公开的或经过身份验证的,或者您设置的任何其他用户。然后您应该检查您在权限下授予哪些权限,下面是我的问题的示例以及我如何解决它。

    我刚从邮递员那里获得身份验证就遇到了这个问题,经过几个小时的反复试验,我发现了这个问题。对于您尝试登录时遇到身份验证错误 403 的任何人。 当您在登录时尝试进行身份验证时,您目前是公共用户,而不是经过身份验证的用户。因此,您需要允许公共用户提出身份验证请求。 转到设置,在“用户和权限插件”、“角色”、“已验证”、“权限”、“用户权限”、“身份验证”下,并确保选中“回调”!然后向 Postman 提出请求,您应该会得到一个 jwt 回复!

    http://localhost:1337/admin/settings/users-permissions/roles/1
    

    对 URL 的 POST 请求:http://localhost:1337/auth/local/

    {
      "identifier": "reader@strapi.io",
      "password": "strapi"
    }
    

    【讨论】:

    • 谢谢!我在登录时遇到问题,显然我更改了“公共”角色用户权限设置。就像您在登录时所说的那样,在通过身份验证之前您是公共用户,因此“公共”角色必须检查“连接”和“回调”。在“用户和权限插件”、“角色”、“公共”、“权限”、“用户权限”、“身份验证”下,并确保选中“回调”和“连接”!然后向 Postman 提出您的请求,您应该会得到一个 jwt 回复!
    • 这是给我的。谢谢一百万!
    【解决方案5】:

    确保 JWT_SECRET 和 ADMIN_JWT_SECRET 存在并且不同

    这可能不会直接帮助 OP,但它确实清除了我的 Strapi 403 错误。

    在成功登录后向 Strapi API 发出经过身份验证的请求时,我收到 403“无效凭据”错误。相同的请求运行良好,匿名用户和所有角色的 API 权限相同。

    解决方案: 最终我的问题是,在我的.env 文件中,JWT_SECRET 和ADMIN_JWT_SECRET 是相同的(我很懒),Strapi 似乎对此有问题。顺便说一句,在我的远程主机上,我忽略了在我的环境中包含 JWT_SECRET。

    1. 为两者定义显式环境变量
    2. 确保它们是不同的字符串

    config/server.js

    module.exports = ({ env }) => ({
        admin: {
            auth: {
                secret: env('ADMIN_JWT_SECRET')
            }
        }
    })
    

    扩展/用户权限/config/jwt.js

    module.exports = {
        jwtSecret: process.env.JWT_SECRET
    }
    

    .env

    JWT_SECRET=someLongSecretPassphrase
    ADMIN_JWT_SECRET=aDifferentLongSecretPassphrase
    

    在这里讨论: https://github.com/strapi/documentation/issues/14

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-16
      • 2017-01-14
      相关资源
      最近更新 更多