Rails API 422 无法处理的实体:没有可用的验证密钥,heroku

Posted

技术标签:

【中文标题】Rails API 422 无法处理的实体:没有可用的验证密钥,heroku【英文标题】:Rails API 422 Unprocessable Entity: No verification key available, heroku 【发布时间】:2021-07-29 01:40:45 【问题描述】:

我创建了一个带有 JWT 身份验证系统的 Rails API,并将其部署到 Heroku。当我在本地请求端点时,一切似乎都工作正常,但是当我向实时端点(即 Heroku 部署的应用程序)发出请求时,我得到一个:422 Unprocessable Entity 服务器错误,响应正文如下所示:


    "message": "No verification key available"

负责对auth token进行编码和解码的类定义如下:

class JsonWebToken
  # secret to encode and decode token
  HMAC_SECRET = Rails.application.secrets.secret_key_base

  def self.encode(payload, exp = 24.hours.from_now)
    # set expiry to 24 hours from the creation time.
    payload[:exp] = exp.to_i

    # sign token with application secret
    JWT.encode(payload, HMAC_SECRET)
  end

  def self.decode(token)
    # get payload, first index in decoded Array
    body = JWT.decode(token, HMAC_SECRET)[0]
    HashWithIndifferentAccess.new body
    # rescue from all decode errors
  rescue JWT::DecodeError => e
    # raise custom error to be handled by custom handler
    raise ExceptionHandler::InvalidToken, e.message
  end
end

我有一个端点 /signup,我可以在其中发出一个 POST 请求来注册一个新用户和一个 POST /todos,它只能对注册用户进行访问和使用。发出注册请求完全正常,但是当我尝试向/todos 端点发出 POST 请求时,它会引发错误。

用户与西装的关联度分别为1:m。

如果您对如何解决此问题有任何想法,我将不胜感激,谢谢:)。

【问题讨论】:

【参考方案1】:

我终于找到了一条出路,将Rails.application.secrets.secret_key_base 更改为Rails.application.secret_key_base。有关这方面的更详细评论,请查看this link。希望这对面临类似问题的人有所帮助。

【讨论】:

以上是关于Rails API 422 无法处理的实体:没有可用的验证密钥,heroku的主要内容,如果未能解决你的问题,请参考以下文章

Rails:Rails 中的 POST 422(不可处理实体)?由于路线或控制器?

Angular + Rails:POST 请求 422/CSRF 错误

如何反序列化 422 无法处理的实体错误模型并将错误绑定到 asp.net core razor pages 模型状态

在“422(无法处理的实体)”Laravel 7 中验证错误时出现错误

PayPal Orders v2 在传递金额折扣时创建返回 422(无法处理的实体)

422 无法处理的实体错误。我尝试上传 Excel 文件以导入数据,但它不工作