Rails中的过滤器参数记录-数据库查询

问题描述 投票:1回答:3

我有一个调用User.find_by_remember_me_token(token)以通过令牌对用户进行身份验证的方法。

config/application.rb中,我添加了config.filter_parameters += [:password, :remember_me_token]

 User Load (0.2ms)  SELECT "users".* FROM "users" WHERE "users"."remember_me_token" = 'LktXTXH2YqHqztFgKNedfsdfRa

如何获得数据库查询中的remember_me_token的[已过滤]?

:remember_me_token在HTTP标头中发送。

ruby-on-rails authentication parameters
3个回答
2
投票

config.log_level = :info中添加此config/environments/development.rb


3
投票

您可以添加config.filter_parameters + = [:password,:remember_me_token]

下面是示例,正在数据库查询中获取[FILTERED]

2012年2月18日星期六15:21:00 +0530开始为127.0.0.1启动GET“ / user / abcdef”由UserController#user_profile处理为HTML

Parameters: {"remember_me_token"=>"[FILTERED]"}
User Load (17.1ms)  SELECT `users`.* FROM `users` WHERE `users`.`remeber_me_toker` = 'abcdef' LIMIT 1
Rendered user/user_profile.erb within layouts/application (17.2ms)
Completed 200 OK in 4624ms (Views: 457.5ms | ActiveRecord: 17.1ms)

0
投票

在Rails 6中,我使用以下技术从各种日志和输出中隐藏令牌。

def authenticate_user                                                                                                                                                                                                                                                                                                                                                                      
  Rails.logger.info "Authenticating user..."                                                                                                                                                                                                                                                                                                                                          
  Rails.logger.silence do                                                                                                                                                                                                                                                                                                                                                             
    @current_user ||= User.find_by(token: token)                                                                                                                                                                                                                                                                                                                    
  end
end

config / initializers / filter_parameter_logging.rb可帮助您过滤日志,以获取以获取/发布形式发送的参数,但无助于标题(如果您记录了这些标题)

filter_attributes可帮助您从inspect和对象时从控制台放置的过滤器进行过滤。这包括任何自动显示的返回结果或to_s。奇怪的是,它不支持像awesome-print这样的自定义打印机。

我确定是否要序列化用户以排除字段:

render json: @users, except: User::EXCLUDED_JSON_FIELDS

最后我只是将方法名称设置为返回nil

def remember_me_token; end

对@ user.remember_me_token进行任何调用都返回nil

除登录事件外,我不将其用于其他任何用途,因此,我无需查看用户的红宝石令牌是什么。如果我真的很在意,我可以只查看数据库。

© www.soinside.com 2019 - 2024. All rights reserved.