Module: Sorcery::Model::Submodules::UserActivation

Defined in:
lib/sorcery/model/submodules/user_activation.rb

Overview

This submodule adds the ability to make the user activate his account via email or any other way in which he can recieve an activation code. with the activation code the user may activate his account. When using this submodule, supplying a mailer is mandatory.

Defined Under Namespace

Modules: ClassMethods, InstanceMethods

Class Method Summary collapse

Class Method Details

.included(base) ⇒ Object



9
10
11
12
13
14
15
16
17
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/sorcery/model/submodules/user_activation.rb', line 9

def self.included(base)
  base.sorcery_config.class_eval do
    attr_accessor :activation_state_attribute_name,               # the attribute name to hold activation state
                                                                  # (active/pending).
                                                                  
                  :activation_token_attribute_name,               # the attribute name to hold activation code
                                                                  # (sent by email).
                                                                  
                  :activation_token_expires_at_attribute_name,    # the attribute name to hold activation code
                                                                  # expiration date. 
                                                                  
                  :activation_token_expiration_period,            # how many seconds before the activation code
                                                                  # expires. nil for never expires.
                                                                  
                  :user_activation_mailer,                        # your mailer class. Required.
                  :activation_needed_email_method_name,           # activation needed email method on your
                                                                  # mailer class.
                                                                  
                  :activation_success_email_method_name,          # activation success email method on your
                                                                  # mailer class.
                                                                  
                  :prevent_non_active_users_to_login              # do you want to prevent or allow users that
                                                                  # did not activate by email to login?
  end
  
  base.sorcery_config.instance_eval do
    @defaults.merge!(:@activation_state_attribute_name             => :activation_state,
                     :@activation_token_attribute_name             => :activation_token,
                     :@activation_token_expires_at_attribute_name  => :activation_token_expires_at,
                     :@activation_token_expiration_period          => nil,
                     :@user_activation_mailer                      => nil,
                     :@activation_needed_email_method_name         => :activation_needed_email,
                     :@activation_success_email_method_name        => :activation_success_email,
                     :@prevent_non_active_users_to_login           => true)
    reset!
  end
  
  base.class_eval do
    # don't setup activation if no password supplied - this user is created automatically
    before_create :setup_activation, :if => Proc.new { |user| user.send(sorcery_config.password_attribute_name).present? }
    # don't send activation needed email if no crypted password created - this user is external (OAuth etc.)
    after_create  :send_activation_needed_email!, :if => Proc.new { |user| !user.external?}
  end
  
  base.sorcery_config.after_config << :validate_mailer_defined
  base.sorcery_config.after_config << :define_user_activation_mongoid_fields if defined?(Mongoid) and base.ancestors.include?(Mongoid::Document)
  base.sorcery_config.before_authenticate << :prevent_non_active_login
  
  base.extend(ClassMethods)
  base.send(:include, InstanceMethods)


end