password_resetter 1.0.6 → 1.0.7
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.md
CHANGED
@@ -57,7 +57,7 @@ The entire form is wrapped with
|
|
57
57
|
|
58
58
|
Email input field is tagged with
|
59
59
|
```ruby
|
60
|
-
:
|
60
|
+
:id => "password_reset_email"
|
61
61
|
```
|
62
62
|
|
63
63
|
Reset Password button:
|
@@ -76,11 +76,27 @@ The entire form is wrapped with
|
|
76
76
|
|
77
77
|
Password and Password Confirmation fields tagged respectively with:
|
78
78
|
```ruby
|
79
|
-
:
|
80
|
-
:
|
79
|
+
:id => "password_reset_password"
|
80
|
+
:id => "password_reset_password_confirmation"
|
81
81
|
```
|
82
82
|
|
83
83
|
Update Password button:
|
84
84
|
```ruby
|
85
|
-
:class => "password-reset-
|
85
|
+
:class => "password-reset-button update"
|
86
|
+
```
|
87
|
+
|
88
|
+
For example, in `application.css.scss`
|
89
|
+
|
90
|
+
```
|
91
|
+
#password_reset_email, #password_reset_password, #password_reset_password_confirmation {
|
92
|
+
margin-bottom: 15px;
|
93
|
+
margin-top: 5px;
|
94
|
+
width: 285px;
|
95
|
+
}
|
96
|
+
|
97
|
+
.password-reset-button {
|
98
|
+
background: image-url("my_button.png");
|
99
|
+
height: 25px;
|
100
|
+
width: 100px;
|
101
|
+
}
|
86
102
|
```
|
@@ -1,19 +1,25 @@
|
|
1
1
|
class PasswordReset < ActiveRecord::Base
|
2
|
-
|
3
2
|
belongs_to :user
|
4
|
-
|
3
|
+
|
5
4
|
attr_accessible :user, :email, :password, :password_confirmation, :reset_token, :reset_sent_at
|
6
|
-
|
5
|
+
|
7
6
|
validates_presence_of :email
|
8
|
-
|
7
|
+
|
9
8
|
def match_email?
|
10
|
-
guest =
|
9
|
+
guest = find_guest(email)
|
11
10
|
if guest.present?
|
12
11
|
self.update_attributes(:user => guest)
|
13
12
|
else
|
14
13
|
false
|
15
14
|
end
|
16
15
|
end
|
16
|
+
|
17
|
+
def find_guest(email_string)
|
18
|
+
User.all.each do |user|
|
19
|
+
return user if user.email == email_string
|
20
|
+
end
|
21
|
+
false
|
22
|
+
end
|
17
23
|
|
18
24
|
def send_password_reset
|
19
25
|
generate_token
|
@@ -21,7 +27,7 @@ class PasswordReset < ActiveRecord::Base
|
|
21
27
|
save
|
22
28
|
PasswordResetMailer.password_reset(user, self).deliver
|
23
29
|
end
|
24
|
-
|
30
|
+
|
25
31
|
def update_user_password(password, confirmation)
|
26
32
|
if passwords_valid?(password, confirmation)
|
27
33
|
user.password = password
|
@@ -31,7 +37,7 @@ class PasswordReset < ActiveRecord::Base
|
|
31
37
|
false
|
32
38
|
end
|
33
39
|
end
|
34
|
-
|
40
|
+
|
35
41
|
def expired?
|
36
42
|
reset_sent_at < 2.hours.ago
|
37
43
|
end
|
@@ -41,7 +47,7 @@ class PasswordReset < ActiveRecord::Base
|
|
41
47
|
pr.delete if (pr.user_id == user.id) && (pr != self)
|
42
48
|
end
|
43
49
|
end
|
44
|
-
|
50
|
+
|
45
51
|
private
|
46
52
|
def generate_token
|
47
53
|
begin
|
@@ -49,7 +55,7 @@ class PasswordReset < ActiveRecord::Base
|
|
49
55
|
end while PasswordReset.exists?(:reset_token => self.reset_token)
|
50
56
|
self.save
|
51
57
|
end
|
52
|
-
|
58
|
+
|
53
59
|
def passwords_valid?(password, confirmation)
|
54
60
|
password.present? && confirmation.present? && password == confirmation
|
55
61
|
end
|
@@ -1,8 +1,8 @@
|
|
1
1
|
<div class="password-reset-complete-field">
|
2
2
|
<%= simple_form_for @password_reset do |f| %>
|
3
3
|
<div class="field">
|
4
|
-
<%= f.input :password, :
|
5
|
-
<%= f.input :password_confirmation, :
|
4
|
+
<%= f.input :password, :label => "New Password" %>
|
5
|
+
<%= f.input :password_confirmation, :label => "Password Confirmation" %>
|
6
6
|
</div>
|
7
7
|
<div class="actions"><%= f.submit "Update Password", :class => "password-reset-button update" %></div>
|
8
8
|
<% end %>
|
@@ -1,10 +1,10 @@
|
|
1
1
|
<div class="password-reset-request-field">
|
2
|
-
<div class="password-reset-text reset">
|
2
|
+
<div class="password-reset-text reset">Forgot Your Password?</div>
|
3
3
|
|
4
4
|
<%= simple_form_for @password_reset do |f| %>
|
5
5
|
<%= f.full_error :user %>
|
6
6
|
<div class="field">
|
7
|
-
<%= f.input :email, :label => "Enter
|
7
|
+
<%= f.input :email, :label => "Enter Your Email Address" %>
|
8
8
|
</div>
|
9
9
|
<div class="actions"><%= submit_tag "Reset Password", :class => "password-reset-button reset" %></div>
|
10
10
|
<% end %>
|
@@ -0,0 +1,62 @@
|
|
1
|
+
module PasswordResetter
|
2
|
+
module Resettable
|
3
|
+
belongs_to :user
|
4
|
+
|
5
|
+
attr_accessible :user, :email, :password, :password_confirmation, :reset_token, :reset_sent_at
|
6
|
+
|
7
|
+
validates_presence_of :email
|
8
|
+
|
9
|
+
def match_email?
|
10
|
+
guest = find_guest(email)
|
11
|
+
if guest.present?
|
12
|
+
self.update_attributes(:user => guest)
|
13
|
+
else
|
14
|
+
false
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def find_guest(email_string)
|
19
|
+
User.where(['email = ?', email_string]).first
|
20
|
+
end
|
21
|
+
|
22
|
+
def send_password_reset
|
23
|
+
generate_token
|
24
|
+
self.update_attributes(:reset_sent_at => Time.zone.now)
|
25
|
+
save
|
26
|
+
PasswordResetMailer.password_reset(user, self).deliver
|
27
|
+
end
|
28
|
+
|
29
|
+
def update_user_password(password, confirmation)
|
30
|
+
if passwords_valid?(password, confirmation)
|
31
|
+
user.password = password
|
32
|
+
user.password_confirmation = confirmation
|
33
|
+
user.save
|
34
|
+
else
|
35
|
+
false
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def expired?
|
40
|
+
reset_sent_at < 2.hours.ago
|
41
|
+
end
|
42
|
+
|
43
|
+
def delete_existing
|
44
|
+
PasswordReset.all.each do |pr|
|
45
|
+
pr.delete if (pr.user_id == user.id) && (pr != self)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
private
|
50
|
+
def generate_token
|
51
|
+
begin
|
52
|
+
self.reset_token = SecureRandom.urlsafe_base64
|
53
|
+
end while PasswordReset.exists?(:reset_token => self.reset_token)
|
54
|
+
self.save
|
55
|
+
end
|
56
|
+
|
57
|
+
def passwords_valid?(password, confirmation)
|
58
|
+
password.present? && confirmation.present? && password == confirmation
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: password_resetter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.7
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-09-
|
12
|
+
date: 2012-09-14 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
@@ -174,6 +174,7 @@ files:
|
|
174
174
|
- config/routes.rb
|
175
175
|
- db/migrate/20120829163145_create_password_resets.rb
|
176
176
|
- lib/password_resetter/engine.rb
|
177
|
+
- lib/password_resetter/resettable.rb
|
177
178
|
- lib/password_resetter/version.rb
|
178
179
|
- lib/password_resetter.rb
|
179
180
|
- lib/tasks/password_resetter_tasks.rake
|