Skip to content

Commit 96e08cd

Browse files
author
Ryan Bigg
committed
Section 6.2: Added Devise + sign up feature
1 parent eb9026e commit 96e08cd

File tree

10 files changed

+418
-1
lines changed

10 files changed

+418
-1
lines changed

ticketee/Gemfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ gem 'sdoc', '~> 0.4.0', group: :doc
2626
gem 'bootstrap-sass', '~> 3.3'
2727
gem 'font-awesome-rails', '~> 4.2'
2828
gem 'simple_form', '3.1.0.rc2'
29+
gem 'devise', '~> 3.4.1'
2930

3031
# Use ActiveModel has_secure_password
3132
# gem 'bcrypt', '~> 3.1.7'

ticketee/Gemfile.lock

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ GEM
3737
thread_safe (~> 0.1)
3838
tzinfo (~> 1.1)
3939
arel (6.0.0)
40+
bcrypt (3.1.9)
4041
binding_of_caller (0.7.2)
4142
debug_inspector (>= 0.0.1)
4243
bootstrap-sass (3.3.0.1)
@@ -62,6 +63,13 @@ GEM
6263
columnize (0.8.9)
6364
debug_inspector (0.0.2)
6465
debugger-linecache (1.2.0)
66+
devise (3.4.1)
67+
bcrypt (~> 3.0)
68+
orm_adapter (~> 0.1)
69+
railties (>= 3.2.6, < 5)
70+
responders
71+
thread_safe (~> 0.1)
72+
warden (~> 1.2.3)
6573
diff-lcs (1.2.5)
6674
erubis (2.7.0)
6775
execjs (2.2.2)
@@ -94,6 +102,7 @@ GEM
94102
multi_json (1.10.1)
95103
nokogiri (1.6.5)
96104
mini_portile (~> 0.6.0)
105+
orm_adapter (0.5.0)
97106
rack (1.6.0.beta2)
98107
rack-test (0.6.2)
99108
rack (>= 1.0)
@@ -124,6 +133,8 @@ GEM
124133
rake (10.4.1)
125134
rdoc (4.1.2)
126135
json (~> 1.4)
136+
responders (2.0.2)
137+
railties (>= 4.2.0.alpha, < 5)
127138
rspec-core (3.1.7)
128139
rspec-support (~> 3.1.0)
129140
rspec-expectations (3.1.2)
@@ -174,6 +185,8 @@ GEM
174185
uglifier (2.5.3)
175186
execjs (>= 0.3.0)
176187
json (>= 1.8.0)
188+
warden (1.2.3)
189+
rack (>= 1.0)
177190
web-console (2.0.0)
178191
activemodel (~> 4.0)
179192
binding_of_caller (>= 0.7.2)
@@ -190,6 +203,7 @@ DEPENDENCIES
190203
byebug
191204
capybara (~> 2.4)
192205
coffee-rails (~> 4.1.0)
206+
devise (~> 3.4.1)
193207
factory_girl_rails (~> 4.5)
194208
font-awesome-rails (~> 4.2)
195209
jbuilder (~> 2.0)

ticketee/app/models/user.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
class User < ActiveRecord::Base
2+
# Include default devise modules. Others available are:
3+
# :confirmable, :lockable, :timeoutable and :omniauthable
4+
devise :database_authenticatable, :registerable,
5+
:recoverable, :rememberable, :trackable, :validatable
6+
end

ticketee/app/views/layouts/application.html.erb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@
2424
<li class='<%= 'active' if current_page?('/') %>'>
2525
<%= link_to "Home", root_path %>
2626
</li>
27+
<li class='<%= 'active' if current_page?('/users/sign_up') %>'>
28+
<%= link_to "Sign up", new_user_registration_path %>
29+
</li>
2730
</ul>
2831
</div>
2932
</nav>
Lines changed: 259 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,259 @@
1+
# Use this hook to configure devise mailer, warden hooks and so forth.
2+
# Many of these configuration options can be set straight in your model.
3+
Devise.setup do |config|
4+
# The secret key used by Devise. Devise uses this key to generate
5+
# random tokens. Changing this key will render invalid all existing
6+
# confirmation, reset password and unlock tokens in the database.
7+
# config.secret_key = 'f77415a35b0d2b4ced875713b9055465e9196b36efe91050517a681368c0d0d3bcbfb4a60738f3543cbdf4dbc50274d8010650c274ef09b50c23b0f98070afb1'
8+
9+
# ==> Mailer Configuration
10+
# Configure the e-mail address which will be shown in Devise::Mailer,
11+
# note that it will be overwritten if you use your own mailer class
12+
# with default "from" parameter.
13+
config.mailer_sender = '[email protected]'
14+
15+
# Configure the class responsible to send e-mails.
16+
# config.mailer = 'Devise::Mailer'
17+
18+
# ==> ORM configuration
19+
# Load and configure the ORM. Supports :active_record (default) and
20+
# :mongoid (bson_ext recommended) by default. Other ORMs may be
21+
# available as additional gems.
22+
require 'devise/orm/active_record'
23+
24+
# ==> Configuration for any authentication mechanism
25+
# Configure which keys are used when authenticating a user. The default is
26+
# just :email. You can configure it to use [:username, :subdomain], so for
27+
# authenticating a user, both parameters are required. Remember that those
28+
# parameters are used only when authenticating and not when retrieving from
29+
# session. If you need permissions, you should implement that in a before filter.
30+
# You can also supply a hash where the value is a boolean determining whether
31+
# or not authentication should be aborted when the value is not present.
32+
# config.authentication_keys = [ :email ]
33+
34+
# Configure parameters from the request object used for authentication. Each entry
35+
# given should be a request method and it will automatically be passed to the
36+
# find_for_authentication method and considered in your model lookup. For instance,
37+
# if you set :request_keys to [:subdomain], :subdomain will be used on authentication.
38+
# The same considerations mentioned for authentication_keys also apply to request_keys.
39+
# config.request_keys = []
40+
41+
# Configure which authentication keys should be case-insensitive.
42+
# These keys will be downcased upon creating or modifying a user and when used
43+
# to authenticate or find a user. Default is :email.
44+
config.case_insensitive_keys = [ :email ]
45+
46+
# Configure which authentication keys should have whitespace stripped.
47+
# These keys will have whitespace before and after removed upon creating or
48+
# modifying a user and when used to authenticate or find a user. Default is :email.
49+
config.strip_whitespace_keys = [ :email ]
50+
51+
# Tell if authentication through request.params is enabled. True by default.
52+
# It can be set to an array that will enable params authentication only for the
53+
# given strategies, for example, `config.params_authenticatable = [:database]` will
54+
# enable it only for database (email + password) authentication.
55+
# config.params_authenticatable = true
56+
57+
# Tell if authentication through HTTP Auth is enabled. False by default.
58+
# It can be set to an array that will enable http authentication only for the
59+
# given strategies, for example, `config.http_authenticatable = [:database]` will
60+
# enable it only for database authentication. The supported strategies are:
61+
# :database = Support basic authentication with authentication key + password
62+
# config.http_authenticatable = false
63+
64+
# If 401 status code should be returned for AJAX requests. True by default.
65+
# config.http_authenticatable_on_xhr = true
66+
67+
# The realm used in Http Basic Authentication. 'Application' by default.
68+
# config.http_authentication_realm = 'Application'
69+
70+
# It will change confirmation, password recovery and other workflows
71+
# to behave the same regardless if the e-mail provided was right or wrong.
72+
# Does not affect registerable.
73+
# config.paranoid = true
74+
75+
# By default Devise will store the user in session. You can skip storage for
76+
# particular strategies by setting this option.
77+
# Notice that if you are skipping storage for all authentication paths, you
78+
# may want to disable generating routes to Devise's sessions controller by
79+
# passing skip: :sessions to `devise_for` in your config/routes.rb
80+
config.skip_session_storage = [:http_auth]
81+
82+
# By default, Devise cleans up the CSRF token on authentication to
83+
# avoid CSRF token fixation attacks. This means that, when using AJAX
84+
# requests for sign in and sign up, you need to get a new CSRF token
85+
# from the server. You can disable this option at your own risk.
86+
# config.clean_up_csrf_token_on_authentication = true
87+
88+
# ==> Configuration for :database_authenticatable
89+
# For bcrypt, this is the cost for hashing the password and defaults to 10. If
90+
# using other encryptors, it sets how many times you want the password re-encrypted.
91+
#
92+
# Limiting the stretches to just one in testing will increase the performance of
93+
# your test suite dramatically. However, it is STRONGLY RECOMMENDED to not use
94+
# a value less than 10 in other environments. Note that, for bcrypt (the default
95+
# encryptor), the cost increases exponentially with the number of stretches (e.g.
96+
# a value of 20 is already extremely slow: approx. 60 seconds for 1 calculation).
97+
config.stretches = Rails.env.test? ? 1 : 10
98+
99+
# Setup a pepper to generate the encrypted password.
100+
# config.pepper = 'c26621321dc5ede126990ac0f15bd883206f0d0240fd5c2b74e19dfa604b50aa0d3cc32f30a73c3be3d9bf6d2e5514de63ca141bac6b26e6ff7319a3c6d26978'
101+
102+
# ==> Configuration for :confirmable
103+
# A period that the user is allowed to access the website even without
104+
# confirming their account. For instance, if set to 2.days, the user will be
105+
# able to access the website for two days without confirming their account,
106+
# access will be blocked just in the third day. Default is 0.days, meaning
107+
# the user cannot access the website without confirming their account.
108+
# config.allow_unconfirmed_access_for = 2.days
109+
110+
# A period that the user is allowed to confirm their account before their
111+
# token becomes invalid. For example, if set to 3.days, the user can confirm
112+
# their account within 3 days after the mail was sent, but on the fourth day
113+
# their account can't be confirmed with the token any more.
114+
# Default is nil, meaning there is no restriction on how long a user can take
115+
# before confirming their account.
116+
# config.confirm_within = 3.days
117+
118+
# If true, requires any email changes to be confirmed (exactly the same way as
119+
# initial account confirmation) to be applied. Requires additional unconfirmed_email
120+
# db field (see migrations). Until confirmed, new email is stored in
121+
# unconfirmed_email column, and copied to email column on successful confirmation.
122+
config.reconfirmable = true
123+
124+
# Defines which key will be used when confirming an account
125+
# config.confirmation_keys = [ :email ]
126+
127+
# ==> Configuration for :rememberable
128+
# The time the user will be remembered without asking for credentials again.
129+
# config.remember_for = 2.weeks
130+
131+
# Invalidates all the remember me tokens when the user signs out.
132+
config.expire_all_remember_me_on_sign_out = true
133+
134+
# If true, extends the user's remember period when remembered via cookie.
135+
# config.extend_remember_period = false
136+
137+
# Options to be passed to the created cookie. For instance, you can set
138+
# secure: true in order to force SSL only cookies.
139+
# config.rememberable_options = {}
140+
141+
# ==> Configuration for :validatable
142+
# Range for password length.
143+
config.password_length = 8..128
144+
145+
# Email regex used to validate email formats. It simply asserts that
146+
# one (and only one) @ exists in the given string. This is mainly
147+
# to give user feedback and not to assert the e-mail validity.
148+
# config.email_regexp = /\A[^@]+@[^@]+\z/
149+
150+
# ==> Configuration for :timeoutable
151+
# The time you want to timeout the user session without activity. After this
152+
# time the user will be asked for credentials again. Default is 30 minutes.
153+
# config.timeout_in = 30.minutes
154+
155+
# If true, expires auth token on session timeout.
156+
# config.expire_auth_token_on_timeout = false
157+
158+
# ==> Configuration for :lockable
159+
# Defines which strategy will be used to lock an account.
160+
# :failed_attempts = Locks an account after a number of failed attempts to sign in.
161+
# :none = No lock strategy. You should handle locking by yourself.
162+
# config.lock_strategy = :failed_attempts
163+
164+
# Defines which key will be used when locking and unlocking an account
165+
# config.unlock_keys = [ :email ]
166+
167+
# Defines which strategy will be used to unlock an account.
168+
# :email = Sends an unlock link to the user email
169+
# :time = Re-enables login after a certain amount of time (see :unlock_in below)
170+
# :both = Enables both strategies
171+
# :none = No unlock strategy. You should handle unlocking by yourself.
172+
# config.unlock_strategy = :both
173+
174+
# Number of authentication tries before locking an account if lock_strategy
175+
# is failed attempts.
176+
# config.maximum_attempts = 20
177+
178+
# Time interval to unlock the account if :time is enabled as unlock_strategy.
179+
# config.unlock_in = 1.hour
180+
181+
# Warn on the last attempt before the account is locked.
182+
# config.last_attempt_warning = true
183+
184+
# ==> Configuration for :recoverable
185+
#
186+
# Defines which key will be used when recovering the password for an account
187+
# config.reset_password_keys = [ :email ]
188+
189+
# Time interval you can reset your password with a reset password key.
190+
# Don't put a too small interval or your users won't have the time to
191+
# change their passwords.
192+
config.reset_password_within = 6.hours
193+
194+
# ==> Configuration for :encryptable
195+
# Allow you to use another encryption algorithm besides bcrypt (default). You can use
196+
# :sha1, :sha512 or encryptors from others authentication tools as :clearance_sha1,
197+
# :authlogic_sha512 (then you should set stretches above to 20 for default behavior)
198+
# and :restful_authentication_sha1 (then you should set stretches to 10, and copy
199+
# REST_AUTH_SITE_KEY to pepper).
200+
#
201+
# Require the `devise-encryptable` gem when using anything other than bcrypt
202+
# config.encryptor = :sha512
203+
204+
# ==> Scopes configuration
205+
# Turn scoped views on. Before rendering "sessions/new", it will first check for
206+
# "users/sessions/new". It's turned off by default because it's slower if you
207+
# are using only default views.
208+
# config.scoped_views = false
209+
210+
# Configure the default scope given to Warden. By default it's the first
211+
# devise role declared in your routes (usually :user).
212+
# config.default_scope = :user
213+
214+
# Set this configuration to false if you want /users/sign_out to sign out
215+
# only the current scope. By default, Devise signs out all scopes.
216+
# config.sign_out_all_scopes = true
217+
218+
# ==> Navigation configuration
219+
# Lists the formats that should be treated as navigational. Formats like
220+
# :html, should redirect to the sign in page when the user does not have
221+
# access, but formats like :xml or :json, should return 401.
222+
#
223+
# If you have any extra navigational formats, like :iphone or :mobile, you
224+
# should add them to the navigational formats lists.
225+
#
226+
# The "*/*" below is required to match Internet Explorer requests.
227+
# config.navigational_formats = ['*/*', :html]
228+
229+
# The default HTTP method used to sign out a resource. Default is :delete.
230+
config.sign_out_via = :delete
231+
232+
# ==> OmniAuth
233+
# Add a new OmniAuth provider. Check the wiki for more information on setting
234+
# up on your models and hooks.
235+
# config.omniauth :github, 'APP_ID', 'APP_SECRET', scope: 'user,public_repo'
236+
237+
# ==> Warden configuration
238+
# If you want to use other strategies, that are not supported by Devise, or
239+
# change the failure app, you can configure them inside the config.warden block.
240+
#
241+
# config.warden do |manager|
242+
# manager.intercept_401 = false
243+
# manager.default_strategies(scope: :user).unshift :some_external_strategy
244+
# end
245+
246+
# ==> Mountable engine configurations
247+
# When using Devise inside an engine, let's call it `MyEngine`, and this engine
248+
# is mountable, there are some extra configurations to be taken into account.
249+
# The following options are available, assuming the engine is mounted as:
250+
#
251+
# mount MyEngine, at: '/my_engine'
252+
#
253+
# The router that invoked `devise_for`, in the example above, would be:
254+
# config.router_name = :my_engine
255+
#
256+
# When using omniauth, Devise cannot automatically set Omniauth path,
257+
# so you need to do it manually. For the users scope, it would be:
258+
# config.omniauth_path_prefix = '/my_engine/users/auth'
259+
end

0 commit comments

Comments
 (0)