2012-02-14 2 views

ответ

62

Это в lib/devise/controllers/helpers.rb1 и генерируется динамически (пользователь является только один из возможных суффиксов):

def self.define_helpers(mapping) #:nodoc: 
    mapping = mapping.name 

    class_eval <<-METHODS, __FILE__, __LINE__ + 1 
     def authenticate_#{mapping}!(opts={}) 
     opts[:scope] = :#{mapping} 
     warden.authenticate!(opts) if !devise_controller? || opts.delete(:force) 
     end 

     def #{mapping}_signed_in? 
     !!current_#{mapping} 
     end 

     def current_#{mapping} 
     @current_#{mapping} ||= warden.authenticate(:scope => :#{mapping}) 
     end 

     def #{mapping}_session 
     current_#{mapping} && warden.session(:#{mapping}) 
     end 
    METHODS 

    ActiveSupport.on_load(:action_controller) do 
     helper_method "current_#{mapping}", "#{mapping}_signed_in?", "#{mapping}_session" 
    end 
    end 
+0

См. Http://stackoverflow.com/questions/32237346/what-is-code-for-devise-authenticate-user-after-generated-for-user – Abram

+1

, так как я могу получить к нему доступность. этот вызов не работает >> 'Devise :: Controllers :: Helpers.authenticate_user!' – vipin8169

19

При добавлении разработать в рельсы, вы обычно добавляете в config/routes.rb:

devise_for :user 

Это определено в Devise Mapper class.

, который вызывает Devise.add_mapping для каждого ресурса переходит к devise_for

метод add_mapping модуля DEViSE в определен here, который впоследствии вызывает define_helpers, который определяет authenticate, как описано в других ответах.

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