Ruby on rails 如何修复Rails中的InvalidAuthenticationToken?
我正在为我的移动应用程序开发一些API,在一些后期操作中,我遇到了以下错误:Ruby on rails 如何修复Rails中的InvalidAuthenticationToken?,ruby-on-rails,Ruby On Rails,我正在为我的移动应用程序开发一些API,在一些后期操作中,我遇到了以下错误: ActionController::InvalidAuthenticityToken my ActionController的代码: class ApplicationController < ActionController::Base # Prevent CSRF attacks by raising an exception. # For APIs, you may want to use :nu
ActionController::InvalidAuthenticityToken
my ActionController的代码:
class ApplicationController < ActionController::Base
# Prevent CSRF attacks by raising an exception.
# For APIs, you may want to use :null_session instead.
protect_from_forgery with: :exception
end
class ApplicationController
我知道如何通过禁用CSRF验证来修复它,但在这种情况下,我的API对于CSRF攻击是不安全的。请告诉我,如何在不禁用CSRF保护的情况下修复此错误?谢谢我使用Rails4 Rails只为html/js请求寻找真实性令牌,而不是json/xml请求,因此这可能不是Rails的问题,实际上可能与传入的头不正确有关。你一定要进去
Content-Type: application/json
客户端,否则rails会认为这是html。您可以使用curl测试这一点:
curl -H "Content-Type: application/json" -X POST http://example.com/...
另外,正如rails所说,您应该使用
protect_from_forgery with: :null_session
不是
在发送post请求之前获取会话[:_csrf_token](您可以创建一个api来获取当前会话的csrf_token),这样您就可以使用参数发送会话[:_csrf_token]。Rails检查除get之外的所有请求的真实性token
也就是说,如果我从手机发送请求,我不需要添加任何真实性令牌。您的更新无法帮助我,因为我不想禁用验证。你为什么要编辑第一个答案?我已经回过头来了,我想我的第二个方法更好,但我知道你是从哪里来的。我还是觉得有点类似。我不是百分之百的你真的能保护好自己。您需要HTTPS和一个额外的api调用来实现这一点。我想我的问题是,仅仅为了确保他们使用的是你的站点而不是像curl这样的东西,这样做(额外的服务器负载和成本)值得吗?他们自己什么都做不了,因为我使用了一些功能。我只想保护我的CSRF应用程序。请告诉我,如果我发送内容类型为“application/json”的参数,我应该使用json对其进行编码?是否可以使用Javascript发送内容类型为“application/json”的请求?
protect_from_forgery with: :exception