2012-02-27 2 views
4

У меня возникла странная ошибка в Rails, я создаю приложение, в котором пользователи могут регистрироваться и загружать файлы. Все работает, но когда я хочу, чтобы загрузить любой файл, код в моем контроллере приложения для проверки активного сеанса не удается, потому что он не может получить доступ к массиву сеанса:Странная вещь при проверке сессий в Rails по запросу POST

def current_user 
    if session[:session].nil? # <- Fails here 
     redirect_to "/login" 
    else 
     if session[:hash] == Digest::SHA512.hexdigest(session[:password]+" - "+session[:username]+" - "+session[:uuid]) #< and here (removing the other if) with NoMethodError 
      return 0 
     else 
      redirect_to "/login" 

     end 

    end 
end 

Это работает на других вещах, но по-видимому брейки по запросам POST. Это мое представление HAML для загрузки файлов:

%b Upload 

%form{:action=>"/u",:method=>"post",:enctype=>"multipart/form-data"} 
    %br 
    %input{:type=>"file",:name=>"file"} 
    %input{:type=>"submit",:value=>"Upload"} 

Что я делаю неправильно? Также в запросах POST я попадаю в журнал приложений: WARNING: Can't verify CSRF token authenticity

ответ

7

Видимо, я должен был добавить это:

%input{:type=>"hidden", :name=>"authenticity_token", :value=>form_authenticity_token.to_s} 

к моей форме Haml, теперь все работает хорошо, и не более WARNING: Can't verify CSRF token authenticity :)

+0

Хм, проблема в том, что вы не использовали помощника Rails. Вы используете там просто HAML. – cicloon

+1

Почему это проблема? – pmerino

+0

Идентификатор подлинности автоматически генерируется, если вы используете помощники рельсов. – cicloon

0

Кажется, что вам не хватает токена подлинности, который создается рельсами, чтобы избежать перекрестного подделки. Проверьте генерации кода HTML, чтобы убедиться, что маркер создан, если это не так. Это проблема, потому что поведение по умолчанию Rails 3, когда токен отсутствует или не совпадает, - это сброс сеанса.

EDIT: Хм проблема в том, что вы не использовали помощника Rails. Вы используете там просто HAML.

+0

В моем макете приложения у меня есть следующее: '= csrf_meta_tags'. Это происходит только тогда, когда я выполняю запрос POST – pmerino

0

только в случае, если кто-то решил использовать HTML хелпер в виде:

<%= hidden_field_tag('authenticity_token', form_authenticity_token.to_s)%> 
Смежные вопросы