2012-02-14 38 views

Trả lời

62

Đó là trong lib/devise/controllers/helpers.rb1 và được tạo ra tự động (người dùng chỉ là một trong những hậu tố có thể):

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

Vui lòng xem http://stackoverflow.com/questions/32237346/what-is-code-for-devise-authenticate-user-after-generated-for-user – Abram

+1

để làm cách nào để truy cập vào tính năng này. cuộc gọi này không hoạt động >> 'Devise :: Controllers :: Helpers.authenticate_user!' – vipin8169

19

Khi bạn thêm đưa ra để đường ray, bạn thường sẽ thêm vào config/routes.rb:

devise_for :user 

Điều này được xác định trong Devise Mapper class.

trong đó kêu gọi Devise.add_mapping cho mỗi tài nguyên đi đến devise_for

phương pháp add_mapping module của lập mưu được xác định here, mà sau đó gọi define_helpers, trong đó xác định authenticate như đã thảo luận trong câu trả lời khác.

Các vấn đề liên quan