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 中验证错误时出现错误