Странная вещь при проверке сессий в Rails по запросу POST - PullRequest
4 голосов
/ 27 февраля 2012

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

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

Ответы [ 3 ]

7 голосов
/ 27 февраля 2012

Видимо мне пришлось добавить это:

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

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

0 голосов
/ 05 июля 2013

на тот случай, если кто-то решит использовать вспомогательный html внутри формы:

  <%= hidden_field_tag('authenticity_token', form_authenticity_token.to_s)%>
0 голосов
/ 27 февраля 2012

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

РЕДАКТИРОВАТЬ: Хм проблема в том, что вы не использовали помощник Rails. Вы используете просто обычный HAML.

...