2015-02-12 1 views
2

У меня есть модифицированные версии примера Devise для LDAP authentication strategy. Он не работает, и я пытаюсь сделать некоторые записи Rails, чтобы понять это, но сам журнал не работает.Как отлаживать стратегию пользовательских разработок в Rails 4?

Я начал работу с logger.debug 'Debug Info'. Затем попробовал Rails.logger.debug 'Debug Info'. И я даже попробовал старомодный puts 'Debug Info'. Ни один из них не будет показан в консоли.

Это соответствующая часть моего 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 "https://stackoverflow.com/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" = $1 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) 

Как я могу напечатать некоторые значения на консоли? Или я пропустил что-то еще?

ответ

1

Если logger.debug "LDAP Authorized!" не отображается, значит, это скорее всего, потому что ваш путь выполнения не попадает в этот раздел кода. Чтобы подтвердить, что ваш код выполняется, попробуйте создать исключение по частям его пути.

Повышение исключений проще для отладки контроллеров, чем для просеивания журналов Rails и помогает сразу же подтвердить, выполняются ли некоторые части вашего кода. Чтобы добавить исключение, попробуйте добавить строку кода, например raise ldap.inspect, в части потока вашего контроллера, чтобы узнать, работает ли этот раздел кода.

При отладке также будет полезно вызвать .inspect на любые переменные экземпляра в этом коде, что даст вам информацию о временном состоянии объектов, которые могут дать вам представление о том, почему все не работает.

+1

Вы правы, я добавил исключение в верхней части моего метода аутентификации и, конечно же, этого не достигнут. – brownmike

+0

@brownmike Вы когда-нибудь выясняли, почему код не был достигнут? – Leons

Смежные вопросы