我正在尝试使用针对特定ID的PUT Web服务更新数据。所以我的json请求就像
{
id: 1,
status: 'A'
}
我的网络服务需要CSRF令牌。所以我首先使用相同的URL进行GET并将header参数和值传递为
x-csrf-token => 'fetch'
GET给了我一个令牌,然后我在PUT的请求头中传递,但我仍然得到CSRF令牌验证失败。
我在RAKE任务中执行GET和PUT(当然使用Ruby on rails)。
Ruby版本2.0.0 Rails版本4.0.0
欢迎任何建议。
由于 阿布舍克巴克
答案 0 :(得分:0)
来自Rails的代码
# Returns true or false if a request is verified. Checks:
#
# * is it a GET or HEAD request? Gets should be safe and idempotent
# * Does the form_authenticity_token match the given token value from the params?
# * Does the X-CSRF-Token header match the form_authenticity_token
def verified_request?
!protect_against_forgery? || request.get? || request.head? ||
form_authenticity_token == params[request_forgery_protection_token] ||
form_authenticity_token == request.headers['X-CSRF-Token']
end
# Sets the token value for the current session.
def form_authenticity_token
session[:_csrf_token] ||= SecureRandom.base64(32)
end
我看待它的方式。如果您在GET
请求中将令牌存储在session[:_csrf_token]
中,然后在params[:authenticity_token]
中的另一个请求中将其传递(默认),那么您应该没问题。