Module: Devise::Models::Autosigninable::ClassMethods

Defined in:
lib/devise_autosigninable/model.rb

Constant Summary collapse

RETRY_COUNT =
20

Instance Method Summary collapse

Instance Method Details

#authenticate_with_autosignin_token(attributes = {}) ⇒ Object

Authenticate a user based on authentication token.



105
106
107
108
109
110
111
112
# File 'lib/devise_autosigninable/model.rb', line 105

def authenticate_with_autosignin_token(attributes={})
  resource = find_by_id(attributes[self.to_s.foreign_key.to_sym].to_i)
  if resource.try(:valid_for_autosignin_token_authentication?, attributes)
    resource
  else
    nil
  end
end

#autosignin_token(uniq = false, field = 'autosignin_token') ⇒ Object

generation random autosignin token



92
93
94
95
96
97
98
99
100
101
102
# File 'lib/devise_autosigninable/model.rb', line 92

def autosignin_token(uniq = false, field = 'autosignin_token')
  if uniq
    RETRY_COUNT.times do
      token = Digest::SHA1.hexdigest("--#{Time.now.utc}--#{rand}--")
      return token unless exists? field => token
    end
    raise Exception.new("Couldn't generate #{self.class}:#{field} for #{RETRY_COUNT} times")
  else
    Digest::SHA1.hexdigest("--#{Time.now.utc}--#{rand}--")
  end
end

#ensure_all_autosignin_tokens(batch_size = 500) ⇒ Object

Generate autosignin tokens unless already exists and save the records.



76
77
78
79
80
81
# File 'lib/devise_autosigninable/model.rb', line 76

def ensure_all_autosignin_tokens(batch_size=500)
  user_count = count( :conditions=>{:autosignin_token => nil})
  find_in_batches(:batch_size =>batch_size, :conditions=>{:autosignin_token => nil}) do |group|
    group.each { |user| user.ensure_autosignin_token! }
  end
end

#reset_all_autosignin_tokens(batch_size = 500) ⇒ Object

Generate autosignin tokens and save the records.



84
85
86
87
88
89
# File 'lib/devise_autosigninable/model.rb', line 84

def reset_all_autosignin_tokens(batch_size=500)
  user_count = count
  find_in_batches(:batch_size =>batch_size) do |group|
    group.each { |user| user.reset_autosignin_token! }
  end
end