ActionController :: SessionsController中的InvalidAuthenticityToken #create error

时间:2010-09-14 01:06:28

标签: ruby-on-rails

我在Rails 2.3.9中遇到此错误,但在2.3.8中没有。我没有改变任何代码。我错过了什么吗?

ActionController::InvalidAuthenticityToken in SessionsController#create ActionController::InvalidAuthenticityToken

谢谢:)

以下是添加的详细信息。

Request

Parameters:

{"commit"=>"Login",
 "authenticity_token"=>"A9A4+sCsA/81FFoXJEUNziQYhgQ38pceGN2i7MUQbQY=",
 "password"=>"r3dp0rt"}

这是应用程序控制器中的代码

class ApplicationController < ActionController::Base
  helper :all # include all helpers, all the time
  protect_from_forgery :secret => "r3dp0rtP@$$", :digest => "MD5" # See ActionController::RequestForgeryProtection for details

以下是我的会话创建控制器的代码

  def create
    session[:password] = params[:password]
    flash[:notice] = "Sucessfully logged in"
    redirect_to "/login"
  end

最后这是我的简单登录视图中的代码

<div id="placeholder">
  <% form_tag :action => "create" do %>
    <p>
    <%= label_tag "This will enable administrative features for the site." %><br>
    <%= password_field_tag "password" %>
    </p>
    <br>
    <p>
    <%= submit_tag "Login" %>
    </p>
  <% end %>
</div>

3 个答案:

答案 0 :(得分:3)

2.3.9中存在错误。它阻止在使用activerecord或memcache会话存储时设置会话ID。见rails ticket。您可以使用http://gist.github.com/570149处的Mislav补丁修复它。您必须在config/initializers/sessions_patch.rb中创建并粘贴代码。或者,您可以在项目根路径中运行以下命令:

wget http://gist.github.com/570149.txt -O config/initializers/sessions_patch.rb

最后不要忘记重新启动服务器(也许可以发出rake db:sessions:clear)。

答案 1 :(得分:2)

答案 2 :(得分:0)

您是否尝试过清除浏览器的浏览数据?很可能它仍在发送旧的AuthenticityToken。