class Devise::Strategies::Meteor
Public Instance Methods
authenticate!()
click to toggle source
# File lib/devise/strategies/meteor.rb, line 11 def authenticate! self.password = params_auth_hash[:password] # search for user email devise_resource = valid_for_params_auth? && mapping.to.find_for_database_authentication(authentication_hash) meteor_resource = User.where(:emails.elem_match => {address: params_auth_hash[:email]}).first unless devise_resource resource = devise_resource || meteor_resource return fail!(:not_found_in_database) unless resource # before continuing authentication process # check existing passwords and synchronize them if meteor_auth_missing?(resource) # when already devise credentials stored # assign them to devise_meteor fields new_hashed_password = User.new(:password => password).encrypted_password resource.services.set(password: {bcrypt: new_hashed_password}) elsif devise_auth_missing?(resource) # when user registered through devise_meteor # and credentials for devise not present email = params_auth_hash[:email] crypt = resource.services.password[:bcrypt] unless resource.update_attributes(encrypted_password: crypt, email: email) fail(resource.unauthenticated_message) end resource.reload elsif both_auth_present?(resource) #when both passwords already set else return pass end # now do validation # this code is copied from Devise::Strategies::DatabaseAuthenticable encrypted = false if validate(resource) { encrypted = true; resource.valid_password?(password) } remember_me(resource) resource.after_database_authentication success!(resource) end mapping.to.new.password = password if !encrypted && Devise.paranoid fail(:not_found_in_database) unless resource end
valid?()
click to toggle source
# File lib/devise/strategies/meteor.rb, line 7 def valid? valid_for_params_auth? || valid_for_http_auth? end
Private Instance Methods
both_auth_present?(resource)
click to toggle source
# File lib/devise/strategies/meteor.rb, line 61 def both_auth_present?(resource) has_a_meteor_password?(resource) && has_a_devise_password?(resource) end
devise_auth_missing?(resource)
click to toggle source
# File lib/devise/strategies/meteor.rb, line 65 def devise_auth_missing?(resource) has_a_meteor_password?(resource) && !has_a_devise_password?(resource) end
encrypt(resource, password)
click to toggle source
# File lib/devise/strategies/meteor.rb, line 86 def encrypt(resource, password) # some old strategies code end
has_a_devise_password?(resource)
click to toggle source
# File lib/devise/strategies/meteor.rb, line 73 def has_a_devise_password?(resource) resource.encrypted_password.present? end
has_a_meteor_password?(resource)
click to toggle source
# File lib/devise/strategies/meteor.rb, line 77 def has_a_meteor_password?(resource) resource.services.password.present? end
legacy_authenticates?(resource, password)
click to toggle source
if you migrate from some other strategies than bcrypt
# File lib/devise/strategies/meteor.rb, line 82 def legacy_authenticates?(resource, password) # resource.encrypted_password == encrypt(resource, password) end
meteor_auth_missing?(resource)
click to toggle source
# File lib/devise/strategies/meteor.rb, line 69 def meteor_auth_missing?(resource) has_a_devise_password?(resource) && !has_a_meteor_password?(resource) end