Module: Devise::Models::CasAuthenticatable::ClassMethods
- Defined in:
- lib/devise_cas_authenticatable/model.rb
Instance Method Summary collapse
-
#authenticate_with_cas_ticket(ticket) ⇒ Object
Authenticate a CAS ticket and return the resulting user object.
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 40 41 42 43 |
# 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? identifier = nil ticket_response = ticket.respond_to?(:user) ? ticket : ticket.response identifier = extract_user_identifier(ticket_response) # If cas_user_identifier isn't in extra_attributes, # or the value is blank, then we're done here return log_and_exit if identifier.nil? logger.debug("Using conditions {#{::Devise.cas_username_column} => #{identifier}} to find the User") conditions = { ::Devise.cas_username_column => identifier } resource = find_or_build_resource_from_conditions(conditions) return nil unless resource resource.cas_extra_attributes = ticket_response.extra_attributes \ if resource.respond_to?(:cas_extra_attributes=) resource.save resource end end |