Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何修复Rails中的InvalidAuthenticationToken?_Ruby On Rails - Fatal编程技术网

Ruby on rails 如何修复Rails中的InvalidAuthenticationToken?

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

我正在为我的移动应用程序开发一些API,在一些后期操作中,我遇到了以下错误:

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