Ruby on rails 在设备中使用warden.authenticate时无法更新参数

Ruby on rails 在设备中使用warden.authenticate时无法更新参数,ruby-on-rails,authentication,devise,warden,Ruby On Rails,Authentication,Devise,Warden,我已经将我的rails从3.2.8升级到rails 4,Desive也从2.1.2升级到3.5.6,warden从1.2.3升级到1.2.6。 我发现一个问题,我不知道它应该属于迪安或典狱长 在我打电话之前 resource = warden.authenticate(:scope => resource_name, :recall =>"#{controller_path}#new") 我更新参数值,如下所示: params[:admin] = Hash.new params[

我已经将我的rails从3.2.8升级到rails 4,Desive也从2.1.2升级到3.5.6,warden从1.2.3升级到1.2.6。 我发现一个问题,我不知道它应该属于迪安或典狱长

在我打电话之前

resource = warden.authenticate(:scope => resource_name, :recall =>"#{controller_path}#new")
我更新参数值,如下所示:

params[:admin] = Hash.new 
params[:admin][:email] = params[:email] 
params[:admin][:password] = params[:password]
但当我在proxy.rb中打印参数时,函数def authenticate(*args) 参数仍然是原始的,其中没有任何管理员

当我使用旧系统时,问题没有发生

以下是我的部分代码和日志: controllers.rb

params[:admin] = Hash.new
params[:admin][:email] = params[:email]
params[:admin][:password] = params[:password]
params[:password] = '11111111111111'
# authenticate with warden
p '===================================='
p params
p warden
resource = warden.authenticate(:scope => resource_name, :recall => "#{controller_path}#new")
p params
p '===================================='
proxy.rb

def authenticate(*args)
  p 'sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss'
  p params
  params[:password] = '111111111'
  p params
  p 'sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss'
  user, _opts = _perform_authentication(*args)
  user
end
日志:

似乎有两个参数,一个在控制器中,一个在管理员中

是否有任何配置或其他我遗漏的内容

希望你的回答,
谢谢你。

当我在这里问和回答类似的问题时,我没有看到这个问题

令人烦恼的是,您在控制器中看到的
params
似乎是机架维护的
params
的克隆,而不是对它的引用。因为warden在中间件层截获请求,所以它保持与请求参数的链接,并且对控制器的克隆一无所知

简而言之,如果您想修改参数并让warden看到您的修改,您需要修改
request.params

"===================================="
{"email"=>"syter@xxxx.com", "password"=>"11111111111111", "controller"=>"admin_sessions", "action"=>"create", "version"=>"v1", "format"=>"json", "admin"=>{"email"=>"syter@xxxx.com", "password"=>"xxxxxxxx"}}
Warden::Proxy:70145506030260 @config={:default_scope=>:admin, :scope_defaults=>{}, :default_strategies=>{:admin=>[:rememberable, :database_authenticatable]}, :intercept_401=>false, :failure_app=>#Devise::Delegator:0x007f980f873e18}
"sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss"
{"email"=>"syter@xxxx.com", "password"=>"xxxxxxxx", "controller"=>"admin_sessions", "action"=>"create", "version"=>"v1", "format"=>"json"}
{"email"=>"syter@xxxx.com", "password"=>"111111111", "controller"=>"admin_sessions", "action"=>"create", "version"=>"v1", "format"=>"json"}
"sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss"
"sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss"
{"email"=>"syter@xxxx.com", "password"=>"111111111", "controller"=>"admin_sessions", "action"=>"create", "version"=>"v1", "format"=>"json"}
"sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss"
{"email"=>"syter@xxxx.com", "password"=>"11111111111111", "controller"=>"admin_sessions", "action"=>"create", "version"=>"v1", "format"=>"json", "admin"=>{"email"=>"syter@xxxx.com", "password"=>"xxxxxxxx"}}
"===================================="