devise_code_authenticatable 0.0.4 → 0.0.5

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5df2a3e0ff87db76b742906c93d2d6789fc90feebb43324040747e7132c373e3
4
- data.tar.gz: 00f26ec893b188625eff3250371b35fa3b9dad6debf76cc76003a23baf91e9b4
3
+ metadata.gz: 58dd319ab275d8bc675530752f29a3c0ff3f2686811ace551d0dbf62c4b576bf
4
+ data.tar.gz: 4974ef85404132a51582a8dbe9caf09bdf3e3e1fc35240f9b381bde28813e1d0
5
5
  SHA512:
6
- metadata.gz: 9a6e8a89807b2d415f1e9f6f64d4fefc978f547c9a814c1d1f01d8e473e7c360c88bfed27b1953e637f0c7bd2b69cf65ea5daf5f0ec0212bb10947913d436176
7
- data.tar.gz: 55c6a35a65eac8634a3c90a783243bdf4c47e29066c7316847fb3386ecc5ac27f3828bd6724e700fc0f97769b2fa896ab6f793e8ae75ea6b380e74e13e768eb0
6
+ metadata.gz: 107e94a1b717569c65b9b0c827a9b638d2c793b2c69b998fd0170948548ec7965744a032a67972824e6b9e86cb7d697857c7530c82adeb2a19812d7c312baf54
7
+ data.tar.gz: 3247e9563aaef5ff0df03602d50da5db013850308bcb82f47712acd185808ca5b9a69c11ac1ae744c163b3ee89484c50aa70415bc39180358a08fa9aece8ab39
@@ -10,11 +10,20 @@ class Devise::LoginCodesController < DeviseController
10
10
  end
11
11
 
12
12
  def show
13
- email = LoginCode.find(params[:id]).user.email
14
- @login_code_id = params[:id]
13
+ @login_code = LoginCode.find(params[:id])
14
+ email = @login_code.resource.email
15
15
  self.resource = resource_class.new(email: email)
16
16
  end
17
17
 
18
+ def resend
19
+ @login_code = LoginCode.find(params[:id])
20
+ self.resource = @login_code.resource.send_code_login_instructions
21
+ if successfully_sent?(resource)
22
+ end
23
+
24
+ redirect_to after_sending_login_code_path_for(resource_name, resource)
25
+ end
26
+
18
27
  protected
19
28
  def auth_options
20
29
  :code_authenticatable
@@ -31,4 +40,7 @@ class Devise::LoginCodesController < DeviseController
31
40
  { methods: methods, only: [:login_code] }
32
41
  end
33
42
 
43
+ def after_sending_login_code_path_for(resource_name, resource)
44
+ login_code_path(resource_name, resource.login_codes.last) if is_navigational_format?
45
+ end
34
46
  end
@@ -5,7 +5,6 @@ class DeviseCodeAuthenticatable::SessionsController < Devise::SessionsController
5
5
  yield resource if block_given?
6
6
 
7
7
  if successfully_sent?(resource)
8
- cookies[:devise_resource_email] = resource.email
9
8
  end
10
9
 
11
10
  respond_with(resource, location: after_sending_login_code_path_for(resource_name, resource))
@@ -17,6 +16,6 @@ class DeviseCodeAuthenticatable::SessionsController < Devise::SessionsController
17
16
  end
18
17
 
19
18
  def after_sending_login_code_path_for(resource_name, resource)
20
- login_code_path(resource_name, resource.existing_login_code) if is_navigational_format?
19
+ login_code_path(resource_name, resource.login_codes.last) if is_navigational_format?
21
20
  end
22
21
  end
@@ -0,0 +1,3 @@
1
+ class LoginCode < ActiveRecord::Base
2
+ include DeviseCodeAuthenticatable::LoginCode
3
+ end
@@ -0,0 +1,15 @@
1
+ <h2><%= t(".sign_in") %></h2>
2
+ <%= simple_form_for resource, url: verify_user_login_code_path(@login_code) do |f| %>
3
+ <div class="field">
4
+ <%= f.input :email, placeholder: "email" %>
5
+ </div>
6
+
7
+ <div class="field">
8
+ <%= f.input :login_code, placeholder: "code" %>
9
+ </div>
10
+
11
+ <div class="actions">
12
+ <%= f.submit t(".sign_in"), class: "btn btn-brand btn-elevate btn-pill" %>
13
+ </div>
14
+ <% end %>
15
+ <%= link_to t(".resend_code"), resend_user_login_code_path(@login_code) %>
@@ -0,0 +1,8 @@
1
+ <h2><%= t(".sign_in") %></h2>
2
+ <%= simple_form_for resource, url: new_session_path(resource_name) do |f| %>
3
+
4
+ <%= f.input :email, placeholder: "email" %>
5
+
6
+ <%= f.submit t(".send_code"), class: "btn btn-brand btn-elevate btn-pill" %>
7
+
8
+ <% end %>
@@ -1,11 +1,14 @@
1
1
  zh-CN:
2
2
  devise:
3
- sessions:
4
- user:
5
- send_instructions: 邮件发送成功!
6
3
  login_codes:
7
4
  new:
8
5
  sign_in: 登录
6
+ show:
7
+ sign_in: 登录
8
+ resend_code: 重新发送验证码
9
+ sessions:
10
+ new:
11
+ send_code: 发送验证码
9
12
  user:
10
13
  send_instructions: 邮件发送成功!
11
14
  signed_in: 登录成功!
@@ -3,7 +3,8 @@ module DeviseCodeAuthenticatable
3
3
  extend ActiveSupport::Concern
4
4
 
5
5
  included do
6
- belongs_to :user
6
+ extend ClassMethods
7
+ belongs_to :resource, polymorphic: true
7
8
 
8
9
  after_initialize :default_values
9
10
  end
@@ -12,7 +13,6 @@ module DeviseCodeAuthenticatable
12
13
  self.code ||= rand(10000..99999)
13
14
  self.expired ||= false
14
15
  self.retry_times ||= 0
15
- self.deliver_method ||= "email"
16
16
  end
17
17
 
18
18
  def verify(code)
@@ -35,5 +35,9 @@ module DeviseCodeAuthenticatable
35
35
  self.expired = true; save
36
36
  end
37
37
 
38
+ module ClassMethods
39
+ Devise::Models.config(self, :login_codes)
40
+ end
41
+
38
42
  end
39
43
  end
@@ -4,25 +4,22 @@ module Devise
4
4
  extend ActiveSupport::Concern
5
5
 
6
6
  included do
7
- has_many :login_codes
7
+ has_many :login_codes, as: :resource
8
8
  end
9
9
 
10
10
  def login_code
11
- existing_login_code&.code
11
+ existing_login_code
12
12
  end
13
13
 
14
14
  def send_code_login_instructions
15
15
  login_code = existing_login_code || generate_login_code
16
16
  send_devise_notification(:code_login_instructions, login_code, {})
17
+ self
17
18
  end
18
19
 
19
20
  def existing_login_code
20
- latest_code = login_codes.last
21
- if latest_code && !latest_code.expired?
22
- login_codes.last
23
- else
24
- nil
25
- end
21
+ login_code = login_codes.last
22
+ login_code && !login_code.expired? ? login_code.code : nil
26
23
  end
27
24
 
28
25
  def generate_login_code
@@ -6,6 +6,7 @@ module ActionDispatch::Routing
6
6
  def devise_login_code(mapping, controllers)
7
7
  resources :login_codes, only: [:show] do
8
8
  member do
9
+ get :resend
9
10
  post :verify
10
11
  end
11
12
  end
@@ -9,15 +9,14 @@ module DeviseCodeAuthenticatable
9
9
  hashed = false
10
10
  login_code = params[scope].fetch "login_code", ""
11
11
 
12
- if resource.existing_login_code.expired?
12
+ if resource.login_codes.last.expired?
13
+ resource.generate_login_code
14
+ resource.send_code_login_instructions
13
15
  fail(:login_code_expired)
14
- resource.send_login_code
15
- respond_with(resource, location: after_sending_login_code_path_for(resource))
16
16
  end
17
17
 
18
- if validate(resource){ hashed = true; resource.existing_login_code.verify(login_code) }
18
+ if validate(resource){ hashed = true; resource.login_codes.last.verify(login_code) }
19
19
  remember_me(resource)
20
- cookies[:devise_resource_email] = resource.email
21
20
  resource.after_code_authentication
22
21
  success!(resource)
23
22
  else
@@ -1,3 +1,3 @@
1
1
  module DeviseCodeAuthenticatable
2
- VERSION = '0.0.4'
2
+ VERSION = '0.0.5'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: devise_code_authenticatable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - vincentying15
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-02-15 00:00:00.000000000 Z
11
+ date: 2020-02-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -42,7 +42,10 @@ files:
42
42
  - Rakefile
43
43
  - app/controllers/devise/login_codes_controller.rb
44
44
  - app/controllers/devise_code_authenticatable/sessions_controller.rb
45
+ - app/models/login_code.rb
46
+ - app/views/devise/login_codes/show.html.erb
45
47
  - app/views/devise/mailer/login_code.html.erb
48
+ - app/views/devise/sessions/new.html.erb
46
49
  - config/locales/zh-CN.yml
47
50
  - lib/devise_code_authenticatable.rb
48
51
  - lib/devise_code_authenticatable/controllers/helpers.rb