2

我正在尝试在我的 rails 应用程序中使用 Warden 进行身份验证。如果我通过 POST 请求以常规形式使用它,它工作正常。但是当我将它移到 Backbone.js 时,我发现验证了!方法总是调用我的失败应用程序。

我在身份验证中放置了一些日志记录!方法,发现params hash为空。像那样:

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 之前看到控制器中的参数!叫做。我只能猜测我的参数去了哪里。我究竟做错了什么?

4

1 回答 1

2

我是 Rails 的新手,所以我的解决方案可能很简单。但由于我没有找到任何与之相关的东西,它可能对某人有用。

关键是 Warden 实例化 Rack::Request 以获得对 params 哈希的访问权。而且它只支持'application/x-www-form-urlencoded'和'multipart/form-data'。 http://rack.rubyforge.org/doc/classes/Rack/Request.html#M000275

控制器中可能使用了不同的解析器,这就是我感到困惑的原因。最后我用外部基于机架的解析器修复了它: https ://github.com/achiu/rack-parser

于 2012-06-14T22:17:41.733 回答