Ruby on rails 在设备中使用warden.authenticate时无法更新参数
我已经将我的rails从3.2.8升级到rails 4,Desive也从2.1.2升级到3.5.6,warden从1.2.3升级到1.2.6。 我发现一个问题,我不知道它应该属于迪安或典狱长 在我打电话之前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[
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"}}
"===================================="