janus 0.6.0 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.rdoc +77 -154
- data/lib/generators/janus/install_generator.rb +19 -0
- data/lib/generators/janus/resource_generator.rb +64 -0
- data/lib/generators/templates/confirmations/new.html.erb +16 -0
- data/lib/generators/templates/confirmations_controller.erb +3 -0
- data/lib/generators/templates/janus.en.yml +62 -0
- data/lib/generators/templates/janus.rb +25 -0
- data/lib/generators/templates/model.erb +8 -0
- data/lib/generators/templates/passwords/edit.html.erb +21 -0
- data/lib/generators/templates/passwords/new.html.erb +16 -0
- data/lib/generators/templates/passwords_controller.erb +3 -0
- data/lib/generators/templates/registrations/edit.html.erb +31 -0
- data/lib/generators/templates/registrations/new.html.erb +26 -0
- data/lib/generators/templates/registrations_controller.erb +17 -0
- data/lib/generators/templates/sessions/new.html.erb +30 -0
- data/lib/generators/templates/sessions_controller.erb +11 -0
- data/lib/janus.rb +1 -0
- data/lib/janus/config.rb +10 -4
- data/lib/janus/controllers/confirmations_controller.rb +6 -6
- data/lib/janus/controllers/helpers.rb +4 -4
- data/lib/janus/controllers/passwords_controller.rb +3 -3
- data/lib/janus/controllers/registrations_controller.rb +12 -9
- data/lib/janus/controllers/sessions_controller.rb +15 -7
- data/lib/janus/helper.rb +1 -1
- data/lib/janus/hooks.rb +6 -6
- data/lib/janus/hooks/rememberable.rb +2 -2
- data/lib/janus/hooks/remote_authenticatable.rb +1 -1
- data/lib/janus/manager.rb +5 -5
- data/lib/janus/models/base.rb +2 -2
- data/lib/janus/models/confirmable.rb +7 -4
- data/lib/janus/models/database_authenticatable.rb +26 -16
- data/lib/janus/models/rememberable.rb +12 -9
- data/lib/janus/models/remote_authenticatable.rb +21 -18
- data/lib/janus/models/trackable.rb +11 -8
- data/lib/janus/routes.rb +22 -22
- data/lib/janus/strategies.rb +3 -3
- data/lib/janus/strategies/database_authenticatable.rb +1 -1
- data/lib/janus/strategies/rememberable.rb +1 -1
- data/lib/janus/strategies/remote_authenticatable.rb +1 -1
- data/lib/janus/test_helper.rb +6 -2
- metadata +19 -36
data/README.rdoc
CHANGED
@@ -1,180 +1,103 @@
|
|
1
1
|
= Janus
|
2
2
|
|
3
|
-
Janus is an authentication engine for Ruby on Rails 3
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
called from SessionsController, and it's not just another strategy operating
|
12
|
-
at the Rack level within Warden (which requires to check that it's being
|
13
|
-
called from the correct URL). There ain't no factory to add strategy modules
|
14
|
-
to your models too. You must manually include the necessary ones.
|
15
|
-
|
16
|
-
Another difference is that you must actually create the necessary controllers,
|
17
|
-
models, mailers and views within your project (extending the default ones).
|
18
|
-
You will eventually need to have those controllers anyway, and having those
|
19
|
-
from the beginning allows to skip some configuration. The burdensome of
|
20
|
-
manually creating all those classes should eventually be leveraged by using
|
21
|
-
some rails generators.
|
22
|
-
|
23
|
-
Janus also provides a finer control over setting and unsetting a user than
|
24
|
-
Warden provides. Janus uses +login+ and +logout+ to actually sign the user
|
25
|
-
in and out, just like Warden, but actually uses +set_user+ and +unset_user+
|
26
|
-
to manually set the session, without dispatching the +after_login+ and
|
27
|
-
+after_logout+ hooks, of course.
|
28
|
-
|
29
|
-
Emails are also sent from the controllers, not from the models, because I
|
30
|
-
believe this is actually the job of controllers, not models.
|
3
|
+
Janus is an authentication engine for Ruby on Rails 3+ to painlessly handle
|
4
|
+
users in your apps. It comes with everything needed, from the migrations to the
|
5
|
+
controllers, plus some different strategies to keep user signed in.
|
6
|
+
|
7
|
+
Janus also tries to be somewhat compatible with Devise's API and conventions,
|
8
|
+
because there was no reason to change it completely. Thought there are some
|
9
|
+
differences, like controllers and views being required in your apps, and emails
|
10
|
+
being sent from the controllers and never from the models.
|
31
11
|
|
32
12
|
== Features
|
33
13
|
|
34
|
-
|
35
|
-
|
36
|
-
|
14
|
+
- full auth system with strategies and hooks;
|
15
|
+
- scoped auth for parallel authentications (like +users+, +admin_users+, etc.);
|
16
|
+
- abstract controllers ready to use;
|
17
|
+
- generators to have everything generated automatically;
|
18
|
+
- use only what you need at anytime.
|
19
|
+
|
20
|
+
As for the strategies and hooks:
|
21
|
+
|
22
|
+
- {DatabaseAuthenticatable}[http://rdoc.info/github/ysbaddaden/janus/Janus/Models/DatabaseAuthenticatable]
|
23
|
+
to auth users with passwords (plus registration and password reset);
|
24
|
+
- {RemoteAuthenticatable}[http://rdoc.info/github/ysbaddaden/janus/Janus/Models/RemoteAuthenticatable]
|
25
|
+
to keep users signed in across top level domains;
|
26
|
+
- {Confirmable}[http://rdoc.info/github/ysbaddaden/janus/Janus/Models/RemoteAuthenticatable]
|
27
|
+
to have users confirm their emails upon registration;
|
28
|
+
- {Rememberable}[http://rdoc.info/github/ysbaddaden/janus/Janus/Models/Rememberable]
|
29
|
+
to keep users authentified;
|
30
|
+
- {Trackable}[http://rdoc.info/github/ysbaddaden/janus/Janus/Models/Trackable]
|
31
|
+
|
32
|
+
== Getting Started
|
33
|
+
|
34
|
+
First add the janus gem to your Gemfile, then run `bundle` to install it:
|
35
|
+
|
36
|
+
gem 'janus'
|
37
|
+
gem 'bcrypt-ruby'
|
38
|
+
# gem 'scrypt'
|
39
|
+
|
40
|
+
You'll also need either the `bcrypt-ruby` or scrypt` gems, depending on which
|
41
|
+
library you want to use to encrypt the passwords. Janus uses bcrypt by default,
|
42
|
+
to be compatible with Devise, but you may prefer scrypt, which is stronger.
|
43
|
+
|
44
|
+
Run the <tt>janus:install</tt> generator to setup janus in your app:
|
45
|
+
|
46
|
+
$ rails generate janus:install
|
37
47
|
|
38
|
-
|
39
|
-
host of blogging website where users may host their blogs on other domains.
|
40
|
-
Since you don't rely on subdomains, it will be a pain to keep the user
|
41
|
-
authentified, because you can't rely on '.' domain cookie trick.
|
48
|
+
Then create your first authenticatable resource, let's say +User+:
|
42
49
|
|
43
|
-
|
44
|
-
keep your users connected across the main website and their blogs. This
|
45
|
-
without actually tracking connections since this strategy takes advantage
|
46
|
-
of the +set_user+ and +unset_user+ methods, because they're not really
|
47
|
-
signing in, they just stay authentified across domains.
|
50
|
+
$ rails generate janus:resource user
|
48
51
|
|
49
|
-
|
52
|
+
You may notice that Janus also generates all the controllers and views. This is
|
53
|
+
because you will eventually need those to customize some behavior and having
|
54
|
+
them around from the beginning is great.
|
50
55
|
|
51
|
-
|
52
|
-
- scoped authentications with parallel authentication (like `users`, `admin_users`, etc.)
|
53
|
-
- database authentication with password encryption (bcrypt) and validation
|
54
|
-
- remote authentication for cross domain single sign in / sign out
|
55
|
-
- abstract controllers for session management, registration, email confirmation and password reset
|
56
|
-
- route generation for the above controllers
|
56
|
+
You may run the routes rake task, to see what routes were added by Janus.
|
57
57
|
|
58
|
-
|
58
|
+
=== Helpers & Filters
|
59
|
+
|
60
|
+
- authenticate_user!
|
61
|
+
- user_signed_in?
|
62
|
+
- current_user
|
63
|
+
|
64
|
+
=== Strategies
|
65
|
+
|
66
|
+
You may customize the strategies for the <tt>janus:resource</tt> generator, like an
|
67
|
+
AdminUser that may only be created and managed from the console:
|
68
|
+
|
69
|
+
$ rails generate janus:resource AdminUser session password remember
|
70
|
+
|
71
|
+
Here is the list of all the current strategies:
|
72
|
+
|
73
|
+
- +session+ — get users signed in and out (email/password combinaison)
|
74
|
+
- +remember+ — keep users signed in across sessions
|
75
|
+
- +registration+ — get users registered
|
76
|
+
- +confirmation+ — emails may be confirmed after registration
|
77
|
+
- +password+ — reset password (using an email exchanged token)
|
78
|
+
- +track+ — track current and previous user's sign in date and IP
|
79
|
+
- +remote+ — keeps users signed in different top level domains
|
59
80
|
|
60
|
-
- DatabaseAuthenticatable
|
61
|
-
- RemoteAuthenticatable
|
62
|
-
- Confirmable
|
63
|
-
- Rememberable
|
64
|
-
- Trackable (note that login through Janus::Manager#set_user won't track the user).
|
65
81
|
|
66
82
|
== TODO
|
67
83
|
|
68
|
-
-
|
84
|
+
- Differenciate mailers per resource, by looking for User::Mailer or AdminUser::Mailer classes.
|
69
85
|
- Reconfirmable when email changes.
|
70
|
-
-
|
71
|
-
-
|
72
|
-
-
|
73
|
-
-
|
74
|
-
-
|
75
|
-
- Providing an OAuth 2.0 server whould be cool.
|
76
|
-
|
77
|
-
== Install
|
78
|
-
|
79
|
-
There is no automated way to install Janus yet, because generators are missing.
|
80
|
-
Also remember that Janus is only compatible with Rails 3+.
|
81
|
-
|
82
|
-
First add the gem to your Gemfile:
|
83
|
-
|
84
|
-
$ gem 'janus'
|
85
|
-
|
86
|
-
Configure your user models by including all or a selection of the Janus::Models
|
87
|
-
modules:
|
88
|
-
|
89
|
-
class User < ActiveRecord::Base
|
90
|
-
include Janus::Models::Base
|
91
|
-
include Janus::Models::DatabaseAuthenticatable
|
92
|
-
include Janus::Models::RemoteAuthenticatable
|
93
|
-
include Janus::Models::Confirmable
|
94
|
-
include Janus::Models::Rememberable
|
95
|
-
include Janus::Models::Trackable
|
96
|
-
end
|
97
|
-
|
98
|
-
class Admin < ActiveRecord::Base
|
99
|
-
include Janus::Models::Base
|
100
|
-
include Janus::Models::DatabaseAuthenticatable
|
101
|
-
end
|
102
|
-
|
103
|
-
Configure your routes:
|
104
|
-
|
105
|
-
Name::Application.routes.map do
|
106
|
-
janus :users, :session => true, :registration => true, :password => true, :confirmation => true
|
107
|
-
janus :admins, :session => true
|
108
|
-
root :to => "home#index"
|
109
|
-
end
|
110
|
-
|
111
|
-
Create the required controllers:
|
112
|
-
|
113
|
-
class Users::SessionsController < Janus::SessionsController
|
114
|
-
respond_to :html
|
115
|
-
end
|
116
|
-
|
117
|
-
class Users::RegistrationsController < Janus::RegistrationsController
|
118
|
-
respond_to :html
|
119
|
-
end
|
120
|
-
|
121
|
-
class Users::PasswordsController < Janus::PasswordsController
|
122
|
-
respond_to :html
|
123
|
-
end
|
124
|
-
|
125
|
-
class Users::ConfirmationsController < Janus::ConfirmationsController
|
126
|
-
respond_to :html
|
127
|
-
end
|
128
|
-
|
129
|
-
class Admins::SessionsController < Janus::SessionsController
|
130
|
-
respond_to :html
|
131
|
-
end
|
132
|
-
|
133
|
-
Copy the views from test/rails_app to your application:
|
134
|
-
|
135
|
-
mkdir name/app/views/users/
|
136
|
-
cp -r janus/test/rails_app/app/views/users/sessions name/app/views/users/
|
137
|
-
cp -r janus/test/rails_app/app/views/users/registrations name/app/views/users/
|
138
|
-
cp -r janus/test/rails_app/app/views/users/confirmations name/app/views/users/
|
139
|
-
cp -r janus/test/rails_app/app/views/users/registrations name/app/views/users/
|
140
|
-
|
141
|
-
mkdir name/app/views/admins/
|
142
|
-
cp -r janus/test/rails_app/app/views/users/sessions name/app/views/users/
|
143
|
-
|
144
|
-
Have a look to the test app in <tt>test/rails_app</tt> for additional help:
|
145
|
-
|
146
|
-
app/controllers/application_controller.rb
|
147
|
-
app/controller/users/confirmations_controller.rb
|
148
|
-
app/controller/users/passwords_controller.rb
|
149
|
-
app/controller/users/registrations_controller.rb
|
150
|
-
app/controller/users/sessions_controller.rb
|
151
|
-
app/mailers/janus_mailer.rb
|
152
|
-
app/models/remote_token.rb
|
153
|
-
app/models/user.rb
|
154
|
-
app/views/janus_mailer/confirmation_instructions.html.erb
|
155
|
-
app/views/janus_mailer/confirmation_instructions.text.erb
|
156
|
-
app/views/janus_mailer/reset_password_instructions.html.erb
|
157
|
-
app/views/janus_mailer/reset_password_instructions.text.erb
|
158
|
-
app/views/users/confirmations/new.html.erb
|
159
|
-
app/views/users/passwords/new.html.erb
|
160
|
-
app/views/users/passwords/edit.html.erb
|
161
|
-
app/views/users/registrations/new.html.erb
|
162
|
-
app/views/users/registrations/edit.html.erb
|
163
|
-
app/views/users/sessions/new.html.erb
|
164
|
-
config/initializers/janus.rb
|
165
|
-
config/locales/janus.en.yml
|
166
|
-
config/routes.rb
|
167
|
-
db/migrate/*.rb
|
86
|
+
- Simple configuration to use scrypt instead of bcrypt for password encryption.
|
87
|
+
- TokenAuthenticatable strategy.
|
88
|
+
- Rememberable across top level domains.
|
89
|
+
- Omniauthable (or shall we let the user do it himself?)
|
90
|
+
- Providing an OAuth 1.0 service whould be cool.
|
168
91
|
|
169
92
|
== License
|
170
93
|
|
171
94
|
Janus is distributed under the MIT-License.
|
172
95
|
|
173
|
-
==
|
96
|
+
== Credits
|
174
97
|
|
175
98
|
Most of the API and some code like password encryption is copied from
|
176
99
|
Devise: http://github.com/plataformatec/devise.git and Warden:
|
177
100
|
http://github.com/hassox/warden
|
178
101
|
|
179
|
-
- Julien Portalier <
|
102
|
+
- Julien Portalier <julien@portalier.com>
|
180
103
|
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'securerandom'
|
2
|
+
|
3
|
+
module Janus
|
4
|
+
module Generators
|
5
|
+
class InstallGenerator < Rails::Generators::Base
|
6
|
+
source_root File.expand_path('../../templates', __FILE__)
|
7
|
+
|
8
|
+
desc "Configures Janus into your app"
|
9
|
+
|
10
|
+
def copy_initializer
|
11
|
+
template 'janus.rb', 'config/initializers/janus.rb'
|
12
|
+
end
|
13
|
+
|
14
|
+
def copy_locale
|
15
|
+
template 'janus.en.yml', 'config/locales/janus.en.yml'
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
module Janus
|
2
|
+
module Generators
|
3
|
+
class ResourceGenerator < Rails::Generators::NamedBase
|
4
|
+
source_root File.expand_path('../../templates', __FILE__)
|
5
|
+
|
6
|
+
argument :strategies, :type => :array, :banner => "strategy strategy",
|
7
|
+
:default => %w{session registration confirmation password remember}
|
8
|
+
|
9
|
+
desc "Generates an authenticatable resource (with migration," <<
|
10
|
+
"routes, strategies and views)"
|
11
|
+
|
12
|
+
def create_resource
|
13
|
+
attributes = [singular_name]
|
14
|
+
attributes += %w{email:string encrypted_password:string}
|
15
|
+
attributes += %w{remember_token:string:uniq remember_created_at:datetime} if strategies.include?('remember')
|
16
|
+
attributes += %w{confirmation_token:string:uniq confirmation_sent_at:datetime confirmed_at:datetime} if strategies.include?('confirmation')
|
17
|
+
attributes += %w{reset_password_token:string:uniq reset_password_sent_at:datetime} if strategies.include?('password')
|
18
|
+
attributes += %w{session_token:string:uniq} if strategies.include?('remote')
|
19
|
+
attributes += %w{sign_in_count:integer last_sign_in_at:datetime last_sign_in_ip:string current_sign_in_at:datetime current_sign_in_ip:string} if strategies.include?('track')
|
20
|
+
generate('model', attributes.join(' '))
|
21
|
+
|
22
|
+
modules = [
|
23
|
+
" include Janus::Models::Base",
|
24
|
+
" include Janus::Models::DatabaseAuthenticatable",
|
25
|
+
]
|
26
|
+
modules << " include Janus::Models::Rememberable" if strategies.include?('remember')
|
27
|
+
modules << " include Janus::Models::Confirmable" if strategies.include?('confirmation')
|
28
|
+
modules << " include Janus::Models::Trackable" if strategies.include?('track')
|
29
|
+
modules << " include Janus::Models::RemoteAuthenticatable" if strategies.include?('remote')
|
30
|
+
inject_into_class "app/models/#{singular_name}.rb", class_name, modules.join("\n") + "\n"
|
31
|
+
end
|
32
|
+
|
33
|
+
def create_controllers_and_views
|
34
|
+
if strategies.include?('session')
|
35
|
+
template 'sessions_controller.erb', "app/controllers/#{plural_name}/sessions_controller.rb"
|
36
|
+
template 'sessions/new.html.erb', "app/views/#{plural_name}/sessions/new.html.erb"
|
37
|
+
end
|
38
|
+
if strategies.include?('registration')
|
39
|
+
template 'registrations_controller.erb', "app/controllers/#{plural_name}/registrations_controller.rb"
|
40
|
+
template 'registrations/new.html.erb', "app/views/#{plural_name}/registrations/new.html.erb"
|
41
|
+
template 'registrations/edit.html.erb', "app/views/#{plural_name}/registrations/edit.html.erb"
|
42
|
+
end
|
43
|
+
if strategies.include?('confirmation')
|
44
|
+
template 'confirmations_controller.erb', "app/controllers/#{plural_name}/confirmations_controller.rb"
|
45
|
+
template 'confirmations/new.html.erb', "app/views/#{plural_name}/confirmations/new.html.erb"
|
46
|
+
end
|
47
|
+
if strategies.include?('password')
|
48
|
+
template 'passwords_controller.erb', "app/controllers/#{plural_name}/passwords_controller.rb"
|
49
|
+
template 'passwords/new.html.erb', "app/views/#{plural_name}/passwords/new.html.erb"
|
50
|
+
template 'passwords/edit.html.erb', "app/views/#{plural_name}/passwords/edit.html.erb"
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def add_janus_route
|
55
|
+
route "janus :#{plural_name}, " + controllers.map { |ctrl| ":#{ctrl} => true" }.join(', ')
|
56
|
+
end
|
57
|
+
|
58
|
+
private
|
59
|
+
def controllers
|
60
|
+
strategies & %w{session registration confirmation password}
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
<h1><%%= t 'janus.confirmations.new.resend_confirmation_instructions' %></h1>
|
2
|
+
|
3
|
+
<%%= form_for @<%= singular_name %>, :url => <%= singular_name %>_confirmation_path, :method => :post do |f| %>
|
4
|
+
<%%= janus_error_messages %>
|
5
|
+
|
6
|
+
<%% <%= class_name %>.authentication_keys.each do |key| %>
|
7
|
+
<div class="field">
|
8
|
+
<%%= f.label key %>
|
9
|
+
<%%= f.text_field key %>
|
10
|
+
</div>
|
11
|
+
<%% end %>
|
12
|
+
|
13
|
+
<div class="actions">
|
14
|
+
<%%= f.submit t('janus.confirmations.new.send_instructions_btn') %>
|
15
|
+
</div>
|
16
|
+
<%% end %>
|
@@ -0,0 +1,62 @@
|
|
1
|
+
en:
|
2
|
+
# activerecord:
|
3
|
+
# attributes:
|
4
|
+
# user:
|
5
|
+
# email: "Email"
|
6
|
+
# password: "Password"
|
7
|
+
# password_confirmation: "Confirm password"
|
8
|
+
# current_password: "Current password"
|
9
|
+
# errors:
|
10
|
+
# messages:
|
11
|
+
# not_found: "not found"
|
12
|
+
|
13
|
+
flash:
|
14
|
+
janus:
|
15
|
+
passwords:
|
16
|
+
create:
|
17
|
+
email_sent: "Instructions to reset your password were sent to your email account."
|
18
|
+
user_not_found: "Error: no such user."
|
19
|
+
update:
|
20
|
+
password_updated: "Your password was successfully resetted."
|
21
|
+
invalid_token: "Error: invalid token."
|
22
|
+
|
23
|
+
janus:
|
24
|
+
mailer:
|
25
|
+
hello: "Hello,"
|
26
|
+
reset_password_instructions:
|
27
|
+
subject: "Instructions to change your password"
|
28
|
+
infos: "Somebody requested to change your password. To do so just click the following link:"
|
29
|
+
change_password_link: "Change my password"
|
30
|
+
please_ignore_your_password_wont_change: "If you didn't make this request, please delete this email immediately. Your password won't change until you click the link and change your password."
|
31
|
+
|
32
|
+
confirmation_instructions:
|
33
|
+
subject: "Confirm your account"
|
34
|
+
confirm: "You may confirm your registration by clicking the following link:"
|
35
|
+
confirm_my_account: "Confirm my account"
|
36
|
+
|
37
|
+
sessions:
|
38
|
+
new:
|
39
|
+
sign_in: "Sign in"
|
40
|
+
sign_in_btn: "Sign in"
|
41
|
+
|
42
|
+
registrations:
|
43
|
+
new:
|
44
|
+
sign_up: "Sign up"
|
45
|
+
sign_up_btn: "Sign up"
|
46
|
+
edit:
|
47
|
+
my_account: "My account"
|
48
|
+
save_changes_btn: "Save changes"
|
49
|
+
|
50
|
+
confirmations:
|
51
|
+
new:
|
52
|
+
resend_confirmation_instructions: "Resend confirmation instructions"
|
53
|
+
send_instructions_btn: "Send instructions"
|
54
|
+
|
55
|
+
passwords:
|
56
|
+
new:
|
57
|
+
forgot_password: "Forgot your password?"
|
58
|
+
send_instructions_btn: "Send instructions"
|
59
|
+
edit:
|
60
|
+
change_password: "Change your password"
|
61
|
+
change_password_btn: "Change my password"
|
62
|
+
|
@@ -0,0 +1,25 @@
|
|
1
|
+
Janus.config do |config|
|
2
|
+
config.contact_email = "contact@some-example-domain.com"
|
3
|
+
|
4
|
+
# DatabaseAuthenticatable
|
5
|
+
config.authentication_keys = [ :email ]
|
6
|
+
|
7
|
+
# you may use bcrypt:
|
8
|
+
config.encryptor = :bcrypt
|
9
|
+
config.stretches = 10
|
10
|
+
config.pepper = <%= SecureRandom.hex(64).inspect %>
|
11
|
+
|
12
|
+
# or you prefer scrypt:
|
13
|
+
# config.encryptor = :scrypt
|
14
|
+
# config.scrypt_options = { :max_time => 0.25 }
|
15
|
+
|
16
|
+
# Confirmable
|
17
|
+
# config.confirmation_key = :confirm_token
|
18
|
+
|
19
|
+
# Rememberable
|
20
|
+
# config.remember_for = 1.year
|
21
|
+
# config.extend_remember_period = false
|
22
|
+
|
23
|
+
# RemoteAuthenticatable
|
24
|
+
# config.remote_authentication_key = :auth_token
|
25
|
+
end
|