如何在 Rails 4 中调试自定义设计策略?
How to Debug Custom Devise Strategy in Rails 4?
我有 LDAP authentication strategy 的 Devise 示例的修改版本。它不工作,我正在尝试做一些 Rails 日志记录来弄清楚,但日志记录本身似乎也没有工作。
我从 logger.debug 'Debug Info'
开始。然后尝试了Rails.logger.debug 'Debug Info'
。我什至尝试过老式的 puts 'Debug Info'
。 None 个将显示在控制台中。
这是我config/initializers/ldap_authenticatable.rb
的相关部分
module Devise
module Strategies
class LdapAuthenticatable < Authenticatable
def authenticate!
Rails.logger.debug '=== Starting LDAP Authentication ==='
fail(:invalid_login) unless params[:user]
ldap.auth find_dn, password
Rails.logger.debug ldap.auth
if ldap.bind
Rails.logger.debug '=== LDAP Authorized! ==='
user = User.find_or_create_by(email: email)
success!(user)
else
Rails.logger.debug '=== LDAP Failed Auth! ==='
fail(:invalid_login)
end
end
...
我已将策略添加到 config/initializers/devise.rb
Devise.setup do |config|
config.warden do |manager|
manager.default_strategies(scope: :user).unshift :ldap_authenticatable
end
...
我根据需要修改了我的User.rb
class User < ActiveRecord::Base
devise :ldap_authenticatable, :rememberable, :trackable
...
这是我的 Rails 日志
Started POST "/users/sign_in" for 127.0.0.1 at 2015-02-11 18:38:16 -0800
Processing by Devise::SessionsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"Cv62THOWW4A/pGeflwrVlWSrABg0kY1UyJGBUoQz/B8daAs/9vMLhe1XTKmIbLWR3G6XXoRbvQ6Wis5GKVQiKA==", "user"=>{"email"=>"[REDACTED]", "password"=>"[FILTERED]", "remember_me"=>"0"}, "commit"=>"Sign in"}
User Load (0.4ms) SELECT "users".* FROM "users" WHERE "users"."email" = ORDER BY "users"."id" ASC LIMIT 1 [["email", "[REDACTED]"]]
Completed 401 Unauthorized in 20ms
Processing by Devise::SessionsController#new as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"Cv62THOWW4A/pGeflwrVlWSrABg0kY1UyJGBUoQz/B8daAs/9vMLhe1XTKmIbLWR3G6XXoRbvQ6Wis5GKVQiKA==", "user"=>{"email"=>"[REDACTED]", "password"=>"[FILTERED]", "remember_me"=>"0"}, "commit"=>"Sign in"}
Rendered devise/sessions/new.html.erb within layouts/application (18.9ms)
Rendered layouts/_navigation_links.html.erb (0.2ms)
Rendered layouts/_navigation.html.erb (0.9ms)
Rendered layouts/_messages.html.erb (0.1ms)
Completed 200 OK in 150ms (Views: 149.0ms | ActiveRecord: 0.0ms)
那么如何将一些值打印到控制台?还是我漏掉了什么?
如果 logger.debug "LDAP Authorized!"
没有出现,则可能是因为您的执行路径没有命中这部分代码。要确认您的代码正在执行,请尝试在其部分路径中引发异常。
调试控制器比尝试筛选 Rails 日志更容易引发异常,并且有助于立即确认代码的某些部分是否正在执行。要添加异常,请尝试向控制器流的某些部分添加一行代码,例如 raise ldap.inspect
,以查看该部分代码是否为 运行。
调试时,在此代码路径中的任何实例变量上调用 .inspect
也会有所帮助,它会为您提供有关对象临时状态的信息,让您深入了解事情为何无法正常工作。
我有 LDAP authentication strategy 的 Devise 示例的修改版本。它不工作,我正在尝试做一些 Rails 日志记录来弄清楚,但日志记录本身似乎也没有工作。
我从 logger.debug 'Debug Info'
开始。然后尝试了Rails.logger.debug 'Debug Info'
。我什至尝试过老式的 puts 'Debug Info'
。 None 个将显示在控制台中。
这是我config/initializers/ldap_authenticatable.rb
module Devise
module Strategies
class LdapAuthenticatable < Authenticatable
def authenticate!
Rails.logger.debug '=== Starting LDAP Authentication ==='
fail(:invalid_login) unless params[:user]
ldap.auth find_dn, password
Rails.logger.debug ldap.auth
if ldap.bind
Rails.logger.debug '=== LDAP Authorized! ==='
user = User.find_or_create_by(email: email)
success!(user)
else
Rails.logger.debug '=== LDAP Failed Auth! ==='
fail(:invalid_login)
end
end
...
我已将策略添加到 config/initializers/devise.rb
Devise.setup do |config|
config.warden do |manager|
manager.default_strategies(scope: :user).unshift :ldap_authenticatable
end
...
我根据需要修改了我的User.rb
class User < ActiveRecord::Base
devise :ldap_authenticatable, :rememberable, :trackable
...
这是我的 Rails 日志
Started POST "/users/sign_in" for 127.0.0.1 at 2015-02-11 18:38:16 -0800
Processing by Devise::SessionsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"Cv62THOWW4A/pGeflwrVlWSrABg0kY1UyJGBUoQz/B8daAs/9vMLhe1XTKmIbLWR3G6XXoRbvQ6Wis5GKVQiKA==", "user"=>{"email"=>"[REDACTED]", "password"=>"[FILTERED]", "remember_me"=>"0"}, "commit"=>"Sign in"}
User Load (0.4ms) SELECT "users".* FROM "users" WHERE "users"."email" = ORDER BY "users"."id" ASC LIMIT 1 [["email", "[REDACTED]"]]
Completed 401 Unauthorized in 20ms
Processing by Devise::SessionsController#new as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"Cv62THOWW4A/pGeflwrVlWSrABg0kY1UyJGBUoQz/B8daAs/9vMLhe1XTKmIbLWR3G6XXoRbvQ6Wis5GKVQiKA==", "user"=>{"email"=>"[REDACTED]", "password"=>"[FILTERED]", "remember_me"=>"0"}, "commit"=>"Sign in"}
Rendered devise/sessions/new.html.erb within layouts/application (18.9ms)
Rendered layouts/_navigation_links.html.erb (0.2ms)
Rendered layouts/_navigation.html.erb (0.9ms)
Rendered layouts/_messages.html.erb (0.1ms)
Completed 200 OK in 150ms (Views: 149.0ms | ActiveRecord: 0.0ms)
那么如何将一些值打印到控制台?还是我漏掉了什么?
如果 logger.debug "LDAP Authorized!"
没有出现,则可能是因为您的执行路径没有命中这部分代码。要确认您的代码正在执行,请尝试在其部分路径中引发异常。
调试控制器比尝试筛选 Rails 日志更容易引发异常,并且有助于立即确认代码的某些部分是否正在执行。要添加异常,请尝试向控制器流的某些部分添加一行代码,例如 raise ldap.inspect
,以查看该部分代码是否为 运行。
调试时,在此代码路径中的任何实例变量上调用 .inspect
也会有所帮助,它会为您提供有关对象临时状态的信息,让您深入了解事情为何无法正常工作。