Module: Devise::Models::CasAuthenticatable::ClassMethods

Defined in:
lib/devise_cas_authenticatable/model.rb

Instance Method Summary collapse

Instance Method Details

#authenticate_with_cas_ticket(ticket) ⇒ Object

Authenticate a CAS ticket and return the resulting user object. Behavior is as follows:

  • Check ticket validity using RubyCAS::Client. Return nil if the ticket is invalid.

  • Find a matching user by username (will use find_for_authentication if available).

  • If the user does not exist, but Devise.cas_create_user is set, attempt to create the user object in the database. If cas_extra_attributes= is defined, this will also pass in the ticket’s extra_attributes hash.

  • Return the resulting user object.



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/devise_cas_authenticatable/model.rb', line 18

def authenticate_with_cas_ticket(ticket)
  ::Devise.cas_client.validate_service_ticket(ticket) unless ticket.has_been_validated?
  
  if ticket.is_valid?
   conditions = {::Devise.cas_username_column => ticket.respond_to?(:user) ? ticket.user : ticket.response.user} 
    # We don't want to override Devise 1.1's find_for_authentication
    resource = if respond_to?(:find_for_authentication)
      find_for_authentication(conditions)
    else
      find(:first, :conditions => conditions)
    end
    
    resource = new(conditions) if (resource.nil? and should_create_cas_users?)
    return nil unless resource
    
    if resource.respond_to? :cas_extra_attributes=
      resource.cas_extra_attributes = ticket.respond_to?(:extra_attributes) ? ticket.extra_attributes : ticket.response.extra_attributes
    end
    resource.save
    resource
  end
end