ActionController :: InvalidAuthenticityToken в SessionsController # создать ошибку - PullRequest
1 голос
/ 14 сентября 2010

Я получаю эту ошибку в 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 ]

3 голосов
/ 17 сентября 2010

В 2.3.9 есть ошибка. Он не позволяет установить идентификатор сеанса при использовании хранилища сессий activerecord или memcache. Смотрите этот билет на рельсы . Вы можете исправить это, используя патч Mislav на http://gist.github.com/570149. Вам нужно будет создать и вставить код в config/initializers/sessions_patch.rb. Или вы можете запустить следующую команду в корневом каталоге вашего проекта:

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

Наконец, не забудьте перезапустить ваш сервер (и, возможно, выпустить rake db:sessions:clear).

2 голосов
/ 06 января 2011

У меня недостаточно баллов, чтобы оставить комментарий к принятому ответу, поэтому я добавлю его в качестве ответа. Патч работает, но просто назовите его sessions_patch.rb, чтобы он был упорядочен в алфавитном порядке ПОСЛЕ session_store.rb. Как я выяснил, нелегко (ошибочно назвав патч session_patch.rb, порядок инициализаторов имеет значение, и патч не будет работать, если он будет загружен до того, как ваш ключ и секрет будут установлены в session_store.rb. Надеюсь, это спасет кого-то некоторое время.

0 голосов
/ 14 сентября 2010

Вы пытались очистить данные браузера вашего браузера? Скорее всего, он все еще отправляет старый AuthenticityToken.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...