module Devise::Models::Rememberable

def self.required_fields(klass)

def self.required_fields(klass)
  [:remember_created_at]
end

def forget_me!

it exists), and save the record without validations.
If the record is persisted, remove the remember token (but only if
def forget_me!
  return unless persisted?
  self.remember_token = nil if respond_to?(:remember_token=)
  self.remember_created_at = nil
  save(:validate => false)
end

def generate_remember_timestamp?(extend_period) #:nodoc:

:nodoc:
exists, or if an existing remember token has expired.
Generate a timestamp if extend_remember_period is true, if no remember_token
def generate_remember_timestamp?(extend_period) #:nodoc:
  extend_period || remember_created_at.nil? || remember_expired?
end

def generate_remember_token? #:nodoc:

:nodoc:
def generate_remember_token? #:nodoc:
  respond_to?(:remember_token) && remember_expired?
end

def remember_expired?

Remember token should be expired if expiration time not overpass now.
def remember_expired?
  remember_created_at.nil? || (remember_expires_at <= Time.now.utc)
end

def remember_expires_at

Remember token expires at created time + remember_for configuration
def remember_expires_at
  remember_created_at + self.class.remember_for
end

def remember_me!(extend_period=false)

unless remember_across_browsers is true and the user already has a valid token.
Generate a new remember token and save the record without validations
def remember_me!(extend_period=false)
  self.remember_token = self.class.remember_token if generate_remember_token?
  self.remember_created_at = Time.now.utc if generate_remember_timestamp?(extend_period)
  save(:validate => false)
end

def rememberable_options

def rememberable_options
  self.class.rememberable_options
end

def rememberable_value

def rememberable_value
  if respond_to?(:remember_token)
    remember_token
  elsif respond_to?(:authenticatable_salt) && (salt = authenticatable_salt)
    salt
  else
    raise "authenticable_salt returned nil for the #{self.class.name} model. " \
      "In order to use rememberable, you must ensure a password is always set " \
      "or have a remember_token column in your model or implement your own " \
      "rememberable_value in the model with custom logic."
  end
end