Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.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 与Firefox相比,保护_免遭_伪造_Ruby On Rails_Firefox - Fatal编程技术网

Ruby on rails 与Firefox相比,保护_免遭_伪造

Ruby on rails 与Firefox相比,保护_免遭_伪造,ruby-on-rails,firefox,Ruby On Rails,Firefox,我最近将会话数据从存储在cookie中切换到存储在数据库中 现在,每个POST请求都会导致ActionController::InvalidAuthenticationToken错误。这只发生在Firefox上,也只发生在我的家用电脑上(我今天在工作中用同一版本的FF试用过,一切都很好)。这让我相信这和我昨天删除的饼干有关 以下是environment.rb的相关部分: # Your secret key for verifying cookie session data integrity.

我最近将会话数据从存储在cookie中切换到存储在数据库中

现在,每个POST请求都会导致ActionController::InvalidAuthenticationToken错误。这只发生在Firefox上,也只发生在我的家用电脑上(我今天在工作中用同一版本的FF试用过,一切都很好)。这让我相信这和我昨天删除的饼干有关

以下是environment.rb的相关部分:

# Your secret key for verifying cookie session data integrity.
# If you change this key, all old sessions will become invalid!
# Make sure the secret is at least 30 characters and all random, 
# no regular words or you'll be exposed to dictionary attacks.
config.action_controller.session = {
:session_key => '_basillslam_session',
:secret      => '373ee5b69a4a31d3318485fs368c41fac6b797a1f5c35693b49bd34e8a96291b92dd577bd49de7aeea56c9ffa1af2d8386bafe857220cafacfa0028f01be357d78'
}

# Use the database for sessions instead of the cookie-based default,
# which shouldn't be used to store highly confidential information
# (create the session table with 'rake db:sessions:create')
config.action_controller.session_store = :active_record_store
在application.rb中:

protect_from_forgery :secret => 'f1d54db45b47ec94a6a54b1e744fafa6'
以下是引发错误的完整跟踪部分:

C:/INSTAN~1/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/request_forgery_protection.rb:79:in `verify_authenticity_token'
C:/INSTAN~1/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/filters.rb:469:in `send!'
C:/INSTAN~1/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/filters.rb:469:in `call'
C:/INSTAN~1/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/filters.rb:441:in `run'
C:/INSTAN~1/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/filters.rb:716:in `run_before_filters'
C:/INSTAN~1/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/filters.rb:695:in `call_filters'
C:/INSTAN~1/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/filters.rb:689:in `perform_action_without_benchmark'
C:/INSTAN~1/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/benchmarking.rb:68:in `perform_action_without_rescue'
C:/INSTAN~1/ruby/lib/ruby/1.8/benchmark.rb:293:in `measure'
C:/INSTAN~1/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/benchmarking.rb:68:in `perform_action_without_rescue'
C:/INSTAN~1/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/rescue.rb:199:in `perform_action_without_caching'
C:/INSTAN~1/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/caching.rb:678:in `perform_action'
C:/INSTAN~1/ruby/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/connection_adapters/abstract/query_cache.rb:33:in `cache'
C:/INSTAN~1/ruby/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/query_cache.rb:8:in `cache'
[etc. ... ]

以前有人经历过吗?或者有人知道为什么会发生这种情况吗?

当我切换一个网站时,同样的事情发生在我身上。在家庭Firefox浏览器中删除该站点的Rails会话cookie

只有当您有一个使用cookie存储的预先存在的会话时,才会发生这种情况。所以,希望只有你和你的浏览器才会看到这个问题。删除cookie后,您将再也看不到错误


由于数据库中有会话,并且浏览器cookie中只有一个随机键映射到该会话,因此不再需要会话保护魔法。

多亏了Otto,我现在知道了发生这种情况的原因。尽管如此,我还是能够通过在发布的表单中编写
来解决这个问题。
token\u标记将包含真实性令牌的隐藏字段放入表单中,因此ActionController::InvalidAuthenticityToken错误消失。

如果应用程序上有多个用户,要让他们全部删除cookie并不容易。 当您切换到数据库存储时,为了防止cookie和数据库存储之间的会话数据冲突,您还可以更改

config.action_controller.session[:session_key]

谢谢奥托,我有种感觉是和旧饼干有关。但问题是,我很确定我已经删除了这个应用程序的所有cookie(机器已经关闭了不止一次,这会清除会话,对吗?)。我是否遗漏了一些具体步骤?另外,在environment.rb和application.rb中设置:session_密钥和:secret是否可以?这可能会引起混乱吗?我只是确保我的cookies被删除了,我仍然会收到相同的错误。奇怪,谢谢你的评论,奥托。我不得不重新安装Firefox。删除我的会话cookies并不能解决问题,这让人有点恼火,因为这几乎肯定是抛出错误的原因。谢谢,奇兰坦,我今晚会尝试一下。这似乎奇怪,我应该作出改变的网站,使其工作在我的家庭机器虽然!我很确定Rails的表单帮助程序默认包含必要的Authentity_令牌,对吗?有道理,关闭cookie会话存储可能会使表单帮助程序不再插入该令牌。顺便说一句,这不是问题,因为您不再使用cookie会话了。。。但是你将来可能想养成一个习惯,把那把秘钥屏蔽掉