Module: Devise::Models::CloudfujiAuthenticatable::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.



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/devise_cas_authenticatable/model.rb', line 24

def authenticate_with_cas_ticket(ticket)
  ::Devise.cas_client.validate_service_ticket(ticket) unless ticket.has_been_validated?

  puts "ticket = #{ticket.inspect}"

  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 ::Devise.cas_create_user?)

    puts "found #{resource.inspect}"

    return nil unless resource

    if resource.respond_to? :cloudfuji_extra_attributes
      extra_attributes = ticket.respond_to?(:extra_attributes) ? ticket.extra_attributes : ticket.response.extra_attributes
      resource.cloudfuji_extra_attributes(extra_attributes)
    end

    resource.save
    resource
  end
end