首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在设计中使用warden.authenticate时无法更新参数

在设计中使用warden.authenticate时无法更新参数
EN

Stack Overflow用户
提问于 2016-03-01 16:01:01
回答 1查看 1.3K关注 0票数 2

我已经将我的rails从3.2.8升级到rails 4,并设计了从2.1.2升级到3.5.6,并从1.2.3升级到1.2.6。我发现一个问题,我不知道它应该属于什么设计或监狱长。

在我打电话之前

代码语言:javascript
复制
resource = warden.authenticate(:scope => resource_name, :recall =>"#{controller_path}#new")

我更新params值如下:

代码语言:javascript
复制
params[:admin] = Hash.new 
params[:admin][:email] = params[:email] 
params[:admin][:password] = params[:password]

但是当我在proxy.rb中打印params时,函数def身份验证(*args)-- params仍然是原始的,其中没有任何管理。

当我使用旧的系统时,这个问题并没有发生。

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

代码语言:javascript
复制
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

代码语言:javascript
复制
def authenticate(*args)
  p 'sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss'
  p params
  params[:password] = '111111111'
  p params
  p 'sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss'
  user, _opts = _perform_authentication(*args)
  user
end

日志:

代码语言:javascript
复制
"===================================="
{"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"}}
"===================================="

似乎有两个帕勒姆,一个在控制器,一个在典狱长。

有什么配置或者其他我错过的东西吗?

希望你的回答,谢谢。

EN

回答 1

Stack Overflow用户

发布于 2017-03-30 17:03:02

当我在这里问和回答类似的问题时,https://stackoverflow.com/a/40512141/208769没有看到这个问题

令人恼怒的是,您在控制器中看到的params似乎是机架维护的params的克隆,而不是对它的引用。因为典狱长在中间件层拦截请求,所以它维护到请求params的链接,并且不知道控制器的克隆。

简而言之,如果您想修改params并让典狱长看到您的修改,则需要修改request.params

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35727602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档