devise_phone 0.0.164 → 0.0.165
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.
- checksums.yaml +4 -4
- data/app/controllers/devise/phone_verifications_controller.rb +16 -3
- data/app/views/devise/phone/_activate_phone.html.erb +9 -0
- data/app/views/devise/phone/_resend_code.html.erb +6 -0
- data/lib/devise_phone.rb +42 -10
- data/lib/devise_phone/controllers/helpers.rb +0 -9
- data/lib/devise_phone/version.rb +1 -1
- data/lib/generators/devise_phone/install_generator.rb +3 -3
- data/lib/generators/devise_phone/views_generator.rb +1 -1
- data/lib/models/phone.rb +88 -100
- metadata +4 -5
- data/app/views/devise/phone/insert.html.erb +0 -11
- data/app/views/devise/phone/new.html.erb +0 -12
- data/lib/generators/templates/lib/sms_sender.rb +0 -19
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 70a83b26e9d151e9b9a8b6fc131fc0f0191a58dd
|
4
|
+
data.tar.gz: 009202764b0c4c904cc1f71484486bf3a3a9a73a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f819275b7113340d0f043da247f723132d2ef5a94d4578b57d0630c013fa703603ba2f66d36885c05ac75d422e417305d16fe2f6118bb042d2271c520ce3f2d8
|
7
|
+
data.tar.gz: 74bc57e15053599775a315c518edba3ee87bd9bcdc7371752e6a5f7612b79107835da62524597adce019c5b93763b7546dc0d9e924f9d1f84bf6b41b545e12c0
|
@@ -9,7 +9,7 @@ class Devise::PhoneVerificationsController < DeviseController
|
|
9
9
|
# POST /resource/phone_verification
|
10
10
|
def create
|
11
11
|
|
12
|
-
self.
|
12
|
+
# self.set_default_phone_attributes_and_send_verification_code
|
13
13
|
|
14
14
|
# self.resource = resource_class.send_verification_code
|
15
15
|
|
@@ -23,13 +23,26 @@ class Devise::PhoneVerificationsController < DeviseController
|
|
23
23
|
|
24
24
|
# GET /resource/phone_verification/insert
|
25
25
|
def insert
|
26
|
-
|
26
|
+
# puts "current_user"
|
27
|
+
# puts current_user
|
28
|
+
# puts "current_user methods"
|
29
|
+
# puts current_user.methods
|
30
|
+
# puts "User.all.first"
|
31
|
+
# puts User.all.first
|
32
|
+
# puts "the same?"
|
33
|
+
# puts User.all.first == current_user
|
34
|
+
|
35
|
+
# User.all.first.generate_verification_code_and_send_sms
|
36
|
+
# puts current_user.methods
|
37
|
+
current_user.generate_verification_code_and_send_sms
|
38
|
+
# build_resource({})
|
27
39
|
end
|
28
40
|
|
29
41
|
# GET or POST /resource/phone_verification/consume?sms_token=abcdef
|
30
42
|
def consume
|
31
43
|
|
32
|
-
|
44
|
+
# puts current_user.phone_number
|
45
|
+
current_user.verify_phone_number_with_code_entered(params[:code_entered])
|
33
46
|
|
34
47
|
# self.resource = resource_class.verify_phone_number_with_code_entered(params[:code_entered])
|
35
48
|
|
@@ -0,0 +1,9 @@
|
|
1
|
+
<h2>Activate Phone Number</h2>
|
2
|
+
|
3
|
+
<%= form_for(resource, :as => resource_name, :url => consume_user_phone_verification_path(resource_name), :html => { :method => :post }, remote: true) do |f| %>
|
4
|
+
|
5
|
+
<p><%=label_tag :code_entered %><br />
|
6
|
+
<%=text_field_tag :code_entered, "" %></p>
|
7
|
+
|
8
|
+
<p><%= f.submit "Activate" %></p>
|
9
|
+
<% end %>
|
data/lib/devise_phone.rb
CHANGED
@@ -10,22 +10,54 @@ require 'devise_phone/controllers/helpers'
|
|
10
10
|
require 'devise_phone/rails'
|
11
11
|
|
12
12
|
module Devise
|
13
|
+
|
14
|
+
# Get the phone class from the phone reference object.
|
15
|
+
def self.phone
|
16
|
+
@@phone_ref.get
|
17
|
+
end
|
18
|
+
|
19
|
+
# Set the phone reference object to access the phone.
|
20
|
+
def self.phone=(class_name)
|
21
|
+
@@phone_ref = ref(class_name)
|
22
|
+
end
|
23
|
+
self.phone = "Devise::Phone"
|
13
24
|
# mattr_accessor :sms_confirm_within
|
14
25
|
# @@sms_confirm_within = 2.days
|
15
26
|
# mattr_accessor :sms_confirmation_keys
|
16
27
|
# @@sms_confirmation_keys = [:email]
|
17
|
-
|
18
|
-
#
|
19
|
-
|
20
|
-
@@sms_sender_ref.get
|
21
|
-
end
|
28
|
+
# def self.setup
|
29
|
+
# yield self
|
30
|
+
# end
|
22
31
|
|
23
|
-
#
|
24
|
-
def
|
25
|
-
|
26
|
-
end
|
32
|
+
# class Getter
|
33
|
+
# def initialize name
|
34
|
+
# @name = name
|
35
|
+
# end
|
36
|
+
|
37
|
+
# def get
|
38
|
+
# ActiveSupport::Dependencies.constantize(@name)
|
39
|
+
# end
|
40
|
+
# end
|
41
|
+
|
42
|
+
# def self.ref(arg)
|
43
|
+
# if defined?(ActiveSupport::Dependencies::ClassCache)
|
44
|
+
# ActiveSupport::Dependencies::reference(arg)
|
45
|
+
# Getter.new(arg)
|
46
|
+
# else
|
47
|
+
# ActiveSupport::Dependencies.ref(arg)
|
48
|
+
# end
|
49
|
+
# end
|
50
|
+
# # Get the sms sender class from the phone reference object.
|
51
|
+
# def self.sms_sender
|
52
|
+
# @@sms_sender_ref.get
|
53
|
+
# end
|
54
|
+
|
55
|
+
# # Set the smser reference object to access the smser.
|
56
|
+
# def self.sms_sender=(class_name)
|
57
|
+
# @@phone_ref = ref(class_name)
|
58
|
+
# end
|
27
59
|
|
28
|
-
|
60
|
+
# @@sms_sender = "Devise::SmsSender"
|
29
61
|
end
|
30
62
|
|
31
63
|
Devise.add_module :phone, :model => "models/phone", :controller => :phone_verifications, :route => :phone_verification
|
@@ -1,12 +1,3 @@
|
|
1
1
|
module DevisePhone::Controllers::Helpers
|
2
|
-
protected
|
3
|
-
|
4
|
-
# Convenience helper to check if user has confirmed the token (and the phone) or not.
|
5
|
-
def require_sms_activated!
|
6
|
-
if(send(:"authenticate_#{resource_name}!"))
|
7
|
-
res=send(:"current_#{resource_name}")
|
8
|
-
fail!(:sms_activation_required) if (!res) || (!res.sms_confirmed?)
|
9
|
-
end
|
10
|
-
end
|
11
2
|
end
|
12
3
|
ActionController::Base.send :include, DevisePhone::Controllers::Helpers
|
data/lib/devise_phone/version.rb
CHANGED
@@ -47,9 +47,9 @@ module DevisePhone
|
|
47
47
|
# copy_file "../../../config/locales/en.yml", "config/locales/devise_phone.en.yml"
|
48
48
|
# end
|
49
49
|
|
50
|
-
def copy_default_smser
|
51
|
-
|
52
|
-
end
|
50
|
+
# def copy_default_smser
|
51
|
+
# copy_file "lib/sms_sender.rb", "lib/devise_sms_sender.rb"
|
52
|
+
# end
|
53
53
|
end
|
54
54
|
end
|
55
55
|
end
|
@@ -2,7 +2,7 @@ require 'generators/devise/views_generator'
|
|
2
2
|
|
3
3
|
module DevisePhone
|
4
4
|
module Generators
|
5
|
-
class ViewsGenerator
|
5
|
+
class ViewsGenerator
|
6
6
|
source_root File.expand_path("../../../../app/views/devise", __FILE__)
|
7
7
|
desc 'Copies all DevisePhone views to your application.'
|
8
8
|
|
data/lib/models/phone.rb
CHANGED
@@ -30,10 +30,12 @@ module Devise
|
|
30
30
|
extend ActiveSupport::Concern
|
31
31
|
|
32
32
|
included do
|
33
|
-
before_create :
|
33
|
+
before_create :set_unverified_phone_attributes, :if => :phone_verification_needed?
|
34
34
|
after_create :generate_verification_code_and_send_sms, :if => :phone_verification_needed?
|
35
35
|
end
|
36
36
|
|
37
|
+
|
38
|
+
|
37
39
|
# # Confirm a user by setting it's sms_confirmed_at to actual time. If the user
|
38
40
|
# # is already confirmed, add en error to email field
|
39
41
|
# def confirm_sms!
|
@@ -51,15 +53,28 @@ module Devise
|
|
51
53
|
|
52
54
|
# Send confirmation token by sms
|
53
55
|
def generate_verification_code_and_send_sms
|
56
|
+
puts "in the public method"
|
54
57
|
if(self.phone_number?)
|
55
|
-
|
56
|
-
|
58
|
+
puts "generating code"
|
59
|
+
update!(phone_verification_code: generate_phone_verification_code)
|
60
|
+
send_sms_verification_code
|
61
|
+
else
|
62
|
+
self.errors.add(:phone_verification_code, :no_phone_associated)
|
63
|
+
false
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def verify_phone_number_with_code_entered(code_entered)
|
68
|
+
if (code_entered == self.phone_verification_code)
|
69
|
+
mark_phone_as_verified!
|
70
|
+
true
|
57
71
|
else
|
58
|
-
|
72
|
+
self.errors.add(:phone_verification_code, :wrong_code_entered)
|
59
73
|
false
|
60
74
|
end
|
61
75
|
end
|
62
76
|
|
77
|
+
|
63
78
|
# # Resend sms confirmation token. This method does not need to generate a new token.
|
64
79
|
# def resend_sms_token
|
65
80
|
# unless_sms_confirmed { send_sms_token }
|
@@ -85,54 +100,23 @@ module Devise
|
|
85
100
|
# self.sms_confirmed_at = Time.now
|
86
101
|
# end
|
87
102
|
|
88
|
-
|
103
|
+
private
|
104
|
+
|
105
|
+
def mark_phone_as_verified!
|
106
|
+
update!(phone_number_verified: true,
|
107
|
+
phone_verification_code: nil,
|
108
|
+
phone_verification_code_sent_at: nil,
|
109
|
+
phone_verified_at: DateTime.now)
|
110
|
+
end
|
89
111
|
|
90
112
|
# Callback to overwrite if an sms confirmation is required or not.
|
91
113
|
def phone_verification_needed?
|
92
114
|
phone_number.present? && !phone_number_verified
|
93
115
|
end
|
94
116
|
|
95
|
-
# def sms_confirmation_required?
|
96
|
-
# !confirmed_sms?
|
97
|
-
# end
|
98
|
-
|
99
|
-
# Checks if the confirmation for the user is within the limit time.
|
100
|
-
# We do this by calculating if the difference between today and the
|
101
|
-
# confirmation sent date does not exceed the confirm in time configured.
|
102
|
-
# Confirm_in is a model configuration, must always be an integer value.
|
103
|
-
#
|
104
|
-
# Example:
|
105
|
-
#
|
106
|
-
# # sms_confirm_within = 1.day and sms_confirmation_sent_at = today
|
107
|
-
# confirmation_period_valid? # returns true
|
108
|
-
#
|
109
|
-
# # sms_confirm_within = 5.days and sms_confirmation_sent_at = 4.days.ago
|
110
|
-
# confirmation_period_valid? # returns true
|
111
|
-
#
|
112
|
-
# # sms_confirm_within = 5.days and sms_confirmation_sent_at = 5.days.ago
|
113
|
-
# confirmation_period_valid? # returns false
|
114
|
-
#
|
115
|
-
# # sms_confirm_within = 0.days
|
116
|
-
# confirmation_period_valid? # will always return false
|
117
|
-
#
|
118
|
-
# def confirmation_sms_period_valid?
|
119
|
-
# sms_confirmation_sent_at && sms_confirmation_sent_at.utc >= self.class.sms_confirm_within.ago
|
120
|
-
# end
|
121
|
-
|
122
|
-
# # Checks whether the record is confirmed or not, yielding to the block
|
123
|
-
# # if it's already confirmed, otherwise adds an error to email.
|
124
|
-
# def unless_sms_confirmed
|
125
|
-
# unless confirmed_sms?
|
126
|
-
# yield
|
127
|
-
# else
|
128
|
-
# self.errors.add(:sms_confirmation_token, :sms_already_confirmed)
|
129
|
-
# false
|
130
|
-
# end
|
131
|
-
# end
|
132
|
-
|
133
117
|
# Generates a new random token for confirmation, and stores the time
|
134
118
|
# this token is being generated
|
135
|
-
def
|
119
|
+
def set_unverified_phone_attributes
|
136
120
|
|
137
121
|
self.phone_number_verified = false
|
138
122
|
self.phone_verification_code_sent_at = DateTime.now
|
@@ -142,74 +126,78 @@ module Devise
|
|
142
126
|
end
|
143
127
|
|
144
128
|
def generate_phone_verification_code
|
145
|
-
# begin
|
146
129
|
verification_code = SecureRandom.hex(3)
|
147
|
-
# end while self.class.exists?(phone_verification_code: verification_code)
|
148
130
|
verification_code
|
149
131
|
end
|
150
132
|
|
151
|
-
|
152
|
-
|
153
|
-
|
133
|
+
def send_sms_verification_code
|
134
|
+
puts "in the private method"
|
135
|
+
|
136
|
+
number_to_send_to = self.phone_number
|
137
|
+
verification_code = self.phone_verification_code
|
154
138
|
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
phone_verification_code_sent_at: nil,
|
180
|
-
phone_verified_at: DateTime.now)
|
181
|
-
end
|
182
|
-
|
183
|
-
def verify_phone_number_with_code_entered(code_entered)
|
184
|
-
if self.phone_verification_code == code_entered
|
185
|
-
mark_phone_as_verified!
|
186
|
-
end
|
139
|
+
twilio_sid = "ACd35391c08cde7926e2295d1812ada918"
|
140
|
+
twilio_token = "44d79a36adb3d54cc15711d94d149119"
|
141
|
+
twilio_phone_number = "6502810746"
|
142
|
+
|
143
|
+
@twilio_client = Twilio::REST::Client.new twilio_sid, twilio_token
|
144
|
+
|
145
|
+
@twilio_client.account.sms.messages.create(
|
146
|
+
:from => "+1#{twilio_phone_number}",
|
147
|
+
:to => number_to_send_to,
|
148
|
+
:body => "Hi! This is MathCrunch. Your verification code is #{verification_code}"
|
149
|
+
)
|
150
|
+
end
|
151
|
+
|
152
|
+
module ClassMethods
|
153
|
+
|
154
|
+
def generate_verification_code_and_send_sms
|
155
|
+
puts "in the public method"
|
156
|
+
if(self.phone_number?)
|
157
|
+
puts "generating code"
|
158
|
+
update!(phone_verification_code: generate_phone_verification_code)
|
159
|
+
send_sms_verification_code
|
160
|
+
else
|
161
|
+
self.errors.add(:phone_verification_code, :no_phone_associated)
|
162
|
+
false
|
187
163
|
end
|
164
|
+
end
|
188
165
|
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
166
|
+
def verify_phone_number_with_code_entered(code_entered)
|
167
|
+
if (code_entered == self.phone_verification_code)
|
168
|
+
mark_phone_as_verified!
|
169
|
+
true
|
170
|
+
else
|
171
|
+
self.errors.add(:phone_verification_code, :wrong_code_entered)
|
172
|
+
false
|
194
173
|
end
|
174
|
+
end
|
175
|
+
|
176
|
+
end
|
195
177
|
|
196
|
-
|
197
|
-
# # The token is 5 chars long and uppercased.
|
178
|
+
|
198
179
|
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
180
|
+
# def mark_phone_as_verified!
|
181
|
+
# update!(phone_number_verified: true,
|
182
|
+
# phone_verification_code: nil,
|
183
|
+
# phone_verification_code_sent_at: nil,
|
184
|
+
# phone_verified_at: DateTime.now)
|
185
|
+
# end
|
205
186
|
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
187
|
+
# def verify_phone_number_with_code_entered(code_entered)
|
188
|
+
# if self.phone_verification_code == code_entered
|
189
|
+
# mark_phone_as_verified!
|
190
|
+
# end
|
191
|
+
# end
|
210
192
|
|
211
|
-
|
212
|
-
|
193
|
+
# def set_unverified_phone_attributes_and_send_verification_code
|
194
|
+
# self.set_verified_phone_attributes
|
195
|
+
# if self.save!
|
196
|
+
# send_sms_for_verification_code
|
197
|
+
# end
|
198
|
+
# end
|
199
|
+
|
200
|
+
# end
|
213
201
|
end
|
214
202
|
end
|
215
203
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: devise_phone
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.165
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hubert Theodore
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-06-
|
11
|
+
date: 2015-06-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -96,8 +96,8 @@ files:
|
|
96
96
|
- README.rdoc
|
97
97
|
- Rakefile
|
98
98
|
- app/controllers/devise/phone_verifications_controller.rb
|
99
|
-
- app/views/devise/phone/
|
100
|
-
- app/views/devise/phone/
|
99
|
+
- app/views/devise/phone/_activate_phone.html.erb
|
100
|
+
- app/views/devise/phone/_resend_code.html.erb
|
101
101
|
- config/locales/en.yml
|
102
102
|
- devise_phone.gemspec
|
103
103
|
- lib/devise_phone.rb
|
@@ -114,7 +114,6 @@ files:
|
|
114
114
|
- lib/generators/devise_phone/install_generator.rb
|
115
115
|
- lib/generators/devise_phone/views_generator.rb
|
116
116
|
- lib/generators/mongoid/devise_phone_generator.rb
|
117
|
-
- lib/generators/templates/lib/sms_sender.rb
|
118
117
|
- lib/models/phone.rb
|
119
118
|
- rails/init.rb
|
120
119
|
homepage: https://github.com/tjhubert/devise_phone
|
@@ -1,11 +0,0 @@
|
|
1
|
-
<h2>Activate Phone Number</h2>
|
2
|
-
|
3
|
-
<%= form_for(resource, :as => resource_name, :url => consume_phone_verification_path(resource_name), :html => { :method => :post }) do |f| %>
|
4
|
-
|
5
|
-
<p><%=label_tag :code_entered %><br />
|
6
|
-
<%=text_field_tag :code_entered, "" %></p>
|
7
|
-
|
8
|
-
<p><%= f.submit "Activate" %></p>
|
9
|
-
<% end %>
|
10
|
-
|
11
|
-
<%= render :partial => "devise/shared/links" %>
|
@@ -1,12 +0,0 @@
|
|
1
|
-
<h2>Resend Phone Verification Code</h2>
|
2
|
-
|
3
|
-
<%= form_for(resource, :as => resource_name, :url => phone_verification_path(resource_name), :html => { :method => :post }) do |f| %>
|
4
|
-
<%= devise_error_messages! %>
|
5
|
-
|
6
|
-
<p><%= f.label :email %><br />
|
7
|
-
<%= f.email_field :email %></p>
|
8
|
-
|
9
|
-
<p><%= f.submit "Resend Phone Verification Code" %></p>
|
10
|
-
<% end %>
|
11
|
-
|
12
|
-
<%= render :partial => "devise/shared/links" %>
|
@@ -1,19 +0,0 @@
|
|
1
|
-
class Devise::SmsSender
|
2
|
-
#Actually sends the sms token. feel free to modify and adapt to your provider and/or gem
|
3
|
-
def send_sms_verification_code_to(user)
|
4
|
-
number_to_send_to = user.phone_number
|
5
|
-
verification_code = user.phone_verification_code
|
6
|
-
|
7
|
-
twilio_sid = "ACd35391c08cde7926e2295d1812ada918"
|
8
|
-
twilio_token = "44d79a36adb3d54cc15711d94d149119"
|
9
|
-
twilio_phone_number = "6502810746"
|
10
|
-
|
11
|
-
@twilio_client = Twilio::REST::Client.new twilio_sid, twilio_token
|
12
|
-
|
13
|
-
@twilio_client.account.sms.messages.create(
|
14
|
-
:from => "+1#{twilio_phone_number}",
|
15
|
-
:to => number_to_send_to,
|
16
|
-
:body => "Hi! This is MathCrunch. Your verification code is #{verification_code}"
|
17
|
-
)
|
18
|
-
end
|
19
|
-
end
|