Module: AuthlogicOpenid::ActsAsAuthentic::Methods
- Defined in:
- lib/authlogic_openid/acts_as_authentic.rb
Class Method Summary collapse
-
.included(klass) ⇒ Object
Set up some simple validations.
Instance Method Summary collapse
-
#openid_identifier=(value) ⇒ Object
Set the openid_identifier field and also resets the persistence_token if this value changes.
-
#save(perform_validation = true, &block) ⇒ Object
This is where all of the magic happens.
Class Method Details
.included(klass) ⇒ Object
Set up some simple validations
20 21 22 23 24 25 |
# File 'lib/authlogic_openid/acts_as_authentic.rb', line 20 def self.included(klass) klass.class_eval do validates_uniqueness_of :openid_identifier, :scope => validations_scope, :if => :using_openid? validate :validate_openid end end |
Instance Method Details
#openid_identifier=(value) ⇒ Object
Set the openid_identifier field and also resets the persistence_token if this value changes.
28 29 30 31 32 33 |
# File 'lib/authlogic_openid/acts_as_authentic.rb', line 28 def openid_identifier=(value) write_attribute(:openid_identifier, value.blank? ? nil : OpenIdAuthentication.normalize_identifier(value)) reset_persistence_token if openid_identifier_changed? rescue OpenIdAuthentication::InvalidOpenId => e @openid_error = e. end |
#save(perform_validation = true, &block) ⇒ Object
This is where all of the magic happens. This is where we hook in and add all of the OpenID sweetness.
I had to take this approach because when authenticating with OpenID nonces and what not are stored in database tables. That being said, the whole save process for ActiveRecord is wrapped in a transaction. Trying to authenticate with OpenID in a transaction is not good because that transaction be get rolled back, thus reversing all of the OpenID inserts and making OpenID authentication fail every time. So We need to step outside of the transaction and do our OpenID madness.
Another advantage of taking this approach is that we can set fields from their OpenID profile before we save the record, if their OpenID provider supports it.
45 46 47 48 49 50 51 52 53 |
# File 'lib/authlogic_openid/acts_as_authentic.rb', line 45 def save(perform_validation = true, &block) if !perform_validation || !authenticate_with_openid? || (authenticate_with_openid? && authenticate_with_openid) result = super yield(result) if block_given? result else false end end |