Параметры внутри стратегии Warden пусты, когда я пытаюсь пройти аутентификацию через ajax

Я пытаюсь использовать Warden для аутентификации в своем приложении rails. И он отлично работает, если я использую его с обычной формой через запрос POST. Но когда я переместил его на Backbone.js, я обнаружил, что аутентифицируется! метод всегда вызывает мое неудачное приложение.

Я поместил журнал внутри аутентификации! метод и обнаружил, что хэш params пуст. Как это:

def authenticate!
    Rails.logger.debug "Parameters inside of Warden: #{params}"
    user = User.find_by_email(params['email'])
    if user && user.authenticate(params['password'])
      success! user
    else
      fail "Invalid email #{request.params['email']} or password #{request.params['password']}!"
    end
end

Он генерирует пустой вывод: Параметры внутри Warden: {}

В то же время я вижу параметры в контроллере перед env['warden'].authenticate! называется. Я могу только догадываться, куда делись мои параметры. Что я делаю неправильно?


person Ivan Yurov    schedule 14.06.2012    source источник


Ответы (1)


Я новичок в Rails, поэтому мое решение может быть тривиальным. Но поскольку я не нашел ничего связанного с этим, это может быть кому-то полезно.

Дело в том, что Warden создает экземпляр Rack::Request, чтобы получить доступ к хэшу params. И он поддерживает только «application/x-www-form-urlencoded» и «multipart/form-data». http://rack.rubyforge.org/doc/classes/Rack/Request.html#M000275

Вероятно, в контроллере используется другой парсер, поэтому я и запутался. Наконец, я исправил это с помощью внешнего анализатора Rack: https://github.com/achiu/rack-parser< /а>

person Ivan Yurov    schedule 14.06.2012
comment
Похоже, что надзиратель очищает хеш параметров по любой причине безопасности, если аутентификация не удалась. - person Mic92; 09.09.2013