solidus_auth_devise 2.2.0 → 2.3.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of solidus_auth_devise might be problematic. Click here for more details.

Files changed (84) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +326 -0
  3. data/CHANGELOG.md +250 -163
  4. data/Gemfile +4 -5
  5. data/README.md +22 -5
  6. data/Rakefile +2 -0
  7. data/app/mailers/spree/user_mailer.rb +4 -2
  8. data/app/models/spree/auth_configuration.rb +2 -0
  9. data/app/models/spree/user.rb +19 -19
  10. data/config/initializers/devise.rb +11 -3
  11. data/config/initializers/warden.rb +4 -2
  12. data/config/locales/en.yml +3 -1
  13. data/config/routes.rb +5 -11
  14. data/db/default/users.rb +10 -8
  15. data/db/migrate/20101026184949_create_users.rb +9 -7
  16. data/db/migrate/20101026184950_rename_columns_for_devise.rb +3 -0
  17. data/db/migrate/20101214150824_convert_user_remember_field.rb +2 -0
  18. data/db/migrate/20120203010234_add_reset_password_sent_at_to_spree_users.rb +2 -0
  19. data/db/migrate/20120605211305_make_users_email_index_unique.rb +4 -2
  20. data/db/migrate/20140904000425_add_deleted_at_to_users.rb +2 -0
  21. data/db/migrate/20141002154641_add_confirmable_to_users.rb +2 -0
  22. data/db/migrate/20190125170630_add_reset_password_token_index_to_spree_users.rb +4 -2
  23. data/db/seeds.rb +2 -0
  24. data/lib/controllers/backend/spree/admin/base_controller_decorator.rb +20 -0
  25. data/lib/controllers/backend/spree/admin/orders/customer_details_controller_decorator.rb +11 -8
  26. data/lib/controllers/backend/spree/admin/user_passwords_controller.rb +4 -2
  27. data/lib/controllers/backend/spree/admin/user_sessions_controller.rb +11 -8
  28. data/lib/controllers/frontend/spree/checkout_controller_decorator.rb +29 -19
  29. data/lib/controllers/frontend/spree/user_confirmations_controller.rb +2 -0
  30. data/lib/controllers/frontend/spree/user_passwords_controller.rb +4 -1
  31. data/lib/controllers/frontend/spree/user_registrations_controller.rb +4 -0
  32. data/lib/controllers/frontend/spree/user_sessions_controller.rb +2 -0
  33. data/lib/controllers/frontend/spree/users_controller.rb +17 -14
  34. data/lib/generators/solidus/auth/install/install_generator.rb +4 -2
  35. data/lib/generators/solidus/auth/install/templates/config/initializers/devise.rb +2 -0
  36. data/lib/solidus/auth.rb +2 -0
  37. data/lib/solidus_auth_devise.rb +2 -0
  38. data/lib/spree/auth/devise.rb +3 -1
  39. data/lib/spree/auth/engine.rb +3 -1
  40. data/lib/spree/auth/version.rb +1 -1
  41. data/lib/spree/authentication_helpers.rb +5 -11
  42. data/lib/tasks/auth.rake +3 -1
  43. data/lib/views/backend/spree/admin/shared/_navigation_footer.html.erb +1 -1
  44. data/lib/views/backend/spree/admin/user_passwords/new.html.erb +1 -3
  45. data/lib/views/backend/spree/admin/user_sessions/new.html.erb +1 -1
  46. data/lib/views/frontend/spree/shared/_login_bar_items.html.erb +1 -1
  47. data/lib/views/frontend/spree/user_passwords/new.html.erb +1 -3
  48. data/solidus_auth_devise.gemspec +16 -6
  49. data/spec/controllers/spree/admin/user_passwords_controller_spec.rb +2 -0
  50. data/spec/controllers/spree/checkout_controller_spec.rb +5 -9
  51. data/spec/controllers/spree/products_controller_spec.rb +2 -1
  52. data/spec/controllers/spree/user_passwords_controller_spec.rb +4 -3
  53. data/spec/controllers/spree/user_registrations_controller_spec.rb +3 -2
  54. data/spec/controllers/spree/user_sessions_controller_spec.rb +14 -0
  55. data/spec/controllers/spree/users_controller_spec.rb +2 -2
  56. data/spec/factories/confirmed_user.rb +5 -3
  57. data/spec/features/account_spec.rb +4 -3
  58. data/spec/features/admin/orders_spec.rb +2 -1
  59. data/spec/features/admin/password_reset_spec.rb +23 -10
  60. data/spec/features/admin/products_spec.rb +2 -1
  61. data/spec/features/admin/sign_in_spec.rb +2 -1
  62. data/spec/features/admin/sign_out_spec.rb +2 -1
  63. data/spec/features/admin_permissions_spec.rb +2 -1
  64. data/spec/features/change_email_spec.rb +3 -2
  65. data/spec/features/checkout_spec.rb +15 -13
  66. data/spec/features/confirmation_spec.rb +2 -0
  67. data/spec/features/order_spec.rb +2 -1
  68. data/spec/features/password_reset_spec.rb +23 -10
  69. data/spec/features/sign_in_spec.rb +2 -1
  70. data/spec/features/sign_out_spec.rb +4 -3
  71. data/spec/features/sign_up_spec.rb +2 -1
  72. data/spec/mailers/user_mailer_spec.rb +2 -1
  73. data/spec/models/order_spec.rb +2 -1
  74. data/spec/models/user_spec.rb +2 -1
  75. data/spec/spec_helper.rb +3 -1
  76. data/spec/support/ability.rb +3 -1
  77. data/spec/support/authentication_helpers.rb +2 -0
  78. data/spec/support/confirm_helpers.rb +4 -2
  79. data/spec/support/email.rb +2 -0
  80. data/spec/support/preferences.rb +10 -2
  81. data/spec/support/spree.rb +2 -0
  82. metadata +94 -35
  83. data/.travis.yml +0 -18
  84. data/lib/controllers/backend/spree/admin/admin_controller_decorator.rb +0 -11
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Spree
2
4
  class User < Spree::Base
3
5
  include UserMethods
@@ -16,10 +18,7 @@ module Spree
16
18
 
17
19
  before_validation :set_login
18
20
 
19
- users_table_name = User.table_name
20
- roles_table_name = Role.table_name
21
-
22
- scope :admin, -> { includes(:spree_roles).where("#{roles_table_name}.name" => "admin") }
21
+ scope :admin, -> { includes(:spree_roles).where("#{Role.table_name}.name" => "admin") }
23
22
 
24
23
  def self.admin_created?
25
24
  User.admin.count > 0
@@ -34,23 +33,24 @@ module Spree
34
33
  end
35
34
 
36
35
  protected
37
- def password_required?
38
- !persisted? || password.present? || password_confirmation.present?
39
- end
36
+
37
+ def password_required?
38
+ !persisted? || password.present? || password_confirmation.present?
39
+ end
40
40
 
41
41
  private
42
42
 
43
- def set_login
44
- # for now force login to be same as email, eventually we will make this configurable, etc.
45
- self.login ||= self.email if self.email
46
- end
47
-
48
- def scramble_email_and_password
49
- self.email = SecureRandom.uuid + "@example.net"
50
- self.login = self.email
51
- self.password = SecureRandom.hex(8)
52
- self.password_confirmation = self.password
53
- self.save
54
- end
43
+ def set_login
44
+ # for now force login to be same as email, eventually we will make this configurable, etc.
45
+ self.login ||= email if email
46
+ end
47
+
48
+ def scramble_email_and_password
49
+ self.email = SecureRandom.uuid + "@example.net"
50
+ self.login = email
51
+ self.password = SecureRandom.hex(8)
52
+ self.password_confirmation = password
53
+ save
54
+ end
55
55
  end
56
56
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Use this hook to configure devise mailer, warden hooks and so forth. The first
2
4
  # four configuration values can also be set straight in your models.
3
5
  Devise.setup do |config|
@@ -29,7 +31,7 @@ Devise.setup do |config|
29
31
  config.http_authenticatable = true
30
32
 
31
33
  # Set this to true to use Basic Auth for AJAX requests. True by default.
32
- #config.http_authenticatable_on_xhr = false
34
+ # config.http_authenticatable_on_xhr = false
33
35
 
34
36
  # The realm used in Http Basic Authentication
35
37
  config.http_authentication_realm = 'Spree Application'
@@ -41,7 +43,11 @@ Devise.setup do |config|
41
43
  config.encryptor = 'authlogic_sha512'
42
44
 
43
45
  # Setup a pepper to generate the encrypted password.
44
- config.pepper = Rails.configuration.secret_token
46
+ config.pepper = if Rails.configuration.respond_to?(:secret_token) && Rails.configuration.secret_token.present?
47
+ Rails.configuration.secret_token
48
+ else
49
+ Rails.configuration.secret_key_base
50
+ end
45
51
 
46
52
  # ==> Configuration for :confirmable
47
53
  # The time you want to give your user to confirm his account. During this time
@@ -114,6 +120,9 @@ Devise.setup do |config|
114
120
  # should add them to the navigational formats lists. Default is [:html]
115
121
  config.navigational_formats = [:html, :json, :xml]
116
122
 
123
+ # The default HTTP method used to sign out a resource. Default is :delete.
124
+ config.sign_out_via = :delete
125
+
117
126
  # ==> Warden configuration
118
127
  # If you want to use other strategies, that are not (yet) supported by Devise,
119
128
  # you can configure them inside the config.warden block. The example below
@@ -132,7 +141,6 @@ Devise.setup do |config|
132
141
  # Don't put a too small interval or your users won't have the time to
133
142
  # change their passwords.
134
143
  config.reset_password_within = 6.hours
135
- config.sign_out_via = :get
136
144
 
137
145
  config.case_insensitive_keys = [:email]
138
146
  end
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Merges users orders to their account after sign in and sign up.
2
- Warden::Manager.after_set_user except: :fetch do |user, auth, opts|
4
+ Warden::Manager.after_set_user except: :fetch do |user, auth, _opts|
3
5
  if auth.cookies.signed[:guest_token].present?
4
6
  if user.is_a?(Spree::User)
5
7
  Spree::Order.incomplete.where(guest_token: auth.cookies.signed[:guest_token], user_id: nil).each do |order|
@@ -9,6 +11,6 @@ Warden::Manager.after_set_user except: :fetch do |user, auth, opts|
9
11
  end
10
12
  end
11
13
 
12
- Warden::Manager.before_logout do |user, auth, opts|
14
+ Warden::Manager.before_logout do |_user, auth, _opts|
13
15
  auth.cookies.delete :guest_token
14
16
  end
@@ -33,8 +33,10 @@ en:
33
33
  spree_user:
34
34
  cannot_be_blank: Your password cannot be blank.
35
35
  no_token: "You can't access this page without coming from a password reset email. If you do come from a password reset email, please make sure you used the full URL provided."
36
- send_instructions: You will receive an email with instructions about how to reset your password in a few minutes.
36
+ send_instructions: If an account with that email address exists, you will receive an email with instructions about how to reset your password in a few minutes.
37
37
  updated: Your password was changed successfully. You are now signed in.
38
+ passwords:
39
+ send_instructions: If an account with that email address exists, you will receive an email with instructions about how to reset your password in a few minutes.
38
40
  user_registrations:
39
41
  destroyed: Bye! Your account was successfully cancelled. We hope to see you again soon.
40
42
  inactive_signed_up: 'You have signed up successfully. However, we could not sign you in because your account is %{reason}.'
data/config/routes.rb CHANGED
@@ -1,9 +1,7 @@
1
- Spree::Core::Engine.routes.draw do
2
- if (
3
- SolidusSupport.frontend_available? &&
4
- Spree::Auth::Config.draw_frontend_routes
5
- )
1
+ # frozen_string_literal: true
6
2
 
3
+ Spree::Core::Engine.routes.draw do
4
+ if SolidusSupport.frontend_available? && Spree::Auth::Config.draw_frontend_routes
7
5
  devise_for(:spree_user, {
8
6
  class_name: 'Spree::User',
9
7
  controllers: {
@@ -39,11 +37,7 @@ Spree::Core::Engine.routes.draw do
39
37
  resource :account, controller: 'users'
40
38
  end
41
39
 
42
- if (
43
- SolidusSupport.backend_available? &&
44
- Spree::Auth::Config.draw_backend_routes
45
- )
46
-
40
+ if SolidusSupport.backend_available? && Spree::Auth::Config.draw_backend_routes
47
41
  namespace :admin do
48
42
  devise_for(:spree_user, {
49
43
  class_name: 'Spree::User',
@@ -61,7 +55,7 @@ Spree::Core::Engine.routes.draw do
61
55
  get '/authorization_failure', to: 'user_sessions#authorization_failure', as: :unauthorized
62
56
  get '/login', to: 'user_sessions#new', as: :login
63
57
  post '/login', to: 'user_sessions#create', as: :create_new_session
64
- get '/logout', to: 'user_sessions#destroy', as: :logout
58
+ match '/logout', to: 'user_sessions#destroy', as: :logout, via: Devise.sign_out_via
65
59
 
66
60
  get '/password/recover', to: 'user_passwords#new', as: :recover_password
67
61
  post '/password/recover', to: 'user_passwords#create', as: :reset_password
data/db/default/users.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # see last line where we create an admin if there is none, asking for email and password
2
4
  def prompt_for_admin_password
3
5
  if ENV['ADMIN_PASSWORD']
@@ -31,20 +33,20 @@ def create_admin_user
31
33
  email = 'admin@example.com'
32
34
  else
33
35
  puts 'Create the admin user (press enter for defaults).'
34
- #name = prompt_for_admin_name unless name
36
+ # name = prompt_for_admin_name unless name
35
37
  email = prompt_for_admin_email
36
38
  password = prompt_for_admin_password
37
39
  end
38
40
  attributes = {
39
- :password => password,
40
- :password_confirmation => password,
41
- :email => email,
42
- :login => email
41
+ password: password,
42
+ password_confirmation: password,
43
+ email: email,
44
+ login: email
43
45
  }
44
46
 
45
47
  load 'spree/user.rb'
46
48
 
47
- if Spree::User.find_by_email(email)
49
+ if Spree::User.find_by(email: email)
48
50
  puts "\nWARNING: There is already a user with the email: #{email}, so no account changes were made. If you wish to create an additional admin user, please run rake spree_auth:admin:create again with a different email.\n\n"
49
51
  else
50
52
  admin = Spree::User.new(attributes)
@@ -55,7 +57,7 @@ def create_admin_user
55
57
  admin.generate_spree_api_key!
56
58
  puts "Done!"
57
59
  else
58
- puts "There was some problems with persisting new admin user:"
60
+ puts "There were some problems with persisting a new admin user:"
59
61
  admin.errors.full_messages.each do |error|
60
62
  puts error
61
63
  end
@@ -66,7 +68,7 @@ end
66
68
  if Spree::User.admin.empty?
67
69
  create_admin_user
68
70
  else
69
- puts 'Admin user has already been previously created.'
71
+ puts 'Admin user has already been created.'
70
72
  puts 'Would you like to create a new admin user? (yes/no)'
71
73
  if ["yes", "y"].include? STDIN.gets.strip.downcase
72
74
  create_admin_user
@@ -1,17 +1,19 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class CreateUsers < SolidusSupport::Migration[4.2]
2
4
  def up
3
5
  unless table_exists?("spree_users")
4
- create_table "spree_users", :force => true do |t|
5
- t.string "crypted_password", :limit => 128
6
- t.string "salt", :limit => 128
6
+ create_table "spree_users", force: true do |t|
7
+ t.string "crypted_password", limit: 128
8
+ t.string "salt", limit: 128
7
9
  t.string "email"
8
10
  t.string "remember_token"
9
11
  t.string "remember_token_expires_at"
10
12
  t.string "persistence_token"
11
13
  t.string "single_access_token"
12
14
  t.string "perishable_token"
13
- t.integer "login_count", :default => 0, :null => false
14
- t.integer "failed_login_count", :default => 0, :null => false
15
+ t.integer "login_count", default: 0, null: false
16
+ t.integer "failed_login_count", default: 0, null: false
15
17
  t.datetime "last_request_at"
16
18
  t.datetime "current_login_at"
17
19
  t.datetime "last_login_at"
@@ -20,8 +22,8 @@ class CreateUsers < SolidusSupport::Migration[4.2]
20
22
  t.string "login"
21
23
  t.integer "ship_address_id"
22
24
  t.integer "bill_address_id"
23
- t.datetime "created_at", :null => false
24
- t.datetime "updated_at", :null => false
25
+ t.datetime "created_at", null: false
26
+ t.datetime "updated_at", null: false
25
27
  t.string "openid_identifier"
26
28
  end
27
29
  end
@@ -1,6 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class RenameColumnsForDevise < SolidusSupport::Migration[4.2]
2
4
  def up
3
5
  return if column_exists?(:spree_users, :password_salt)
6
+
4
7
  rename_column :spree_users, :crypted_password, :encrypted_password
5
8
  rename_column :spree_users, :salt, :password_salt
6
9
  rename_column :spree_users, :remember_token_expires_at, :remember_created_at
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class ConvertUserRememberField < SolidusSupport::Migration[4.2]
2
4
  def up
3
5
  remove_column :spree_users, :remember_created_at
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class AddResetPasswordSentAtToSpreeUsers < SolidusSupport::Migration[4.2]
2
4
  def change
3
5
  Spree::User.reset_column_information
@@ -1,9 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class MakeUsersEmailIndexUnique < SolidusSupport::Migration[4.2]
2
4
  def up
3
- add_index "spree_users", ["email"], :name => "email_idx_unique", :unique => true
5
+ add_index "spree_users", ["email"], name: "email_idx_unique", unique: true
4
6
  end
5
7
 
6
8
  def down
7
- remove_index "spree_users", :name => "email_idx_unique"
9
+ remove_index "spree_users", name: "email_idx_unique"
8
10
  end
9
11
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class AddDeletedAtToUsers < SolidusSupport::Migration[4.2]
2
4
  def change
3
5
  add_column :spree_users, :deleted_at, :datetime
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class AddConfirmableToUsers < SolidusSupport::Migration[4.2]
2
4
  def change
3
5
  add_column :spree_users, :confirmation_token, :string
@@ -1,8 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class AddResetPasswordTokenIndexToSpreeUsers < SolidusSupport::Migration[4.2]
2
4
  # We're not using the standard Rails index name because somebody could have
3
- # already added that index to the table. By using a custom name we ensure
5
+ #  already added that index to the table. By using a custom name we ensure
4
6
  # that the index can effectively be added and removed via migrations/rollbacks
5
- # without having any impact on such installations. The index name is Rails
7
+ #  without having any impact on such installations. The index name is Rails
6
8
  # standard name + "_solidus_auth_devise"; the length is 61 chars which is
7
9
  # still OK for Sqlite, mySQL and Postgres.
8
10
  def custom_index_name
data/db/seeds.rb CHANGED
@@ -1 +1,3 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'default/users.rb'
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Spree
4
+ module Admin
5
+ module BaseControllerDecorator
6
+ protected
7
+
8
+ def model_class
9
+ const_name = controller_name.classify
10
+ if Spree.const_defined?(const_name, false)
11
+ return "Spree::#{const_name}".constantize
12
+ end
13
+
14
+ nil
15
+ end
16
+
17
+ ::Spree::Admin::BaseController.prepend self
18
+ end
19
+ end
20
+ end
@@ -1,15 +1,18 @@
1
+ # frozen_string_literal: true
2
+
1
3
  Spree::Admin::Orders::CustomerDetailsController.class_eval do
2
4
  before_action :check_authorization
3
5
 
4
6
  private
5
- def check_authorization
6
- load_order
7
- session[:access_token] ||= params[:token]
8
7
 
9
- resource = @order
10
- action = params[:action].to_sym
11
- action = :edit if action == :show # show route renders :edit for this controller
8
+ def check_authorization
9
+ load_order
10
+ session[:access_token] ||= params[:token]
11
+
12
+ resource = @order
13
+ action = params[:action].to_sym
14
+ action = :edit if action == :show # show route renders :edit for this controller
12
15
 
13
- authorize! action, resource, session[:access_token]
14
- end
16
+ authorize! action, resource, session[:access_token]
17
+ end
15
18
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Spree::Admin::UserPasswordsController < Devise::PasswordsController
2
4
  helper 'spree/base'
3
5
 
@@ -20,8 +22,9 @@ class Spree::Admin::UserPasswordsController < Devise::PasswordsController
20
22
  def create
21
23
  self.resource = resource_class.send_reset_password_instructions(params[resource_name])
22
24
 
25
+ set_flash_message(:notice, :send_instructions) if is_navigational_format?
26
+
23
27
  if resource.errors.empty?
24
- set_flash_message(:notice, :send_instructions) if is_navigational_format?
25
28
  respond_with resource, location: spree.admin_login_path
26
29
  else
27
30
  respond_with_navigational(resource) { render :new }
@@ -39,5 +42,4 @@ class Spree::Admin::UserPasswordsController < Devise::PasswordsController
39
42
  super
40
43
  end
41
44
  end
42
-
43
45
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Spree::Admin::UserSessionsController < Devise::SessionsController
2
4
  helper 'spree/base'
3
5
 
@@ -19,7 +21,7 @@ class Spree::Admin::UserSessionsController < Devise::SessionsController
19
21
  }
20
22
  format.js {
21
23
  user = resource.record
22
- render json: {ship_address: user.ship_address, bill_address: user.bill_address}.to_json
24
+ render json: { ship_address: user.ship_address, bill_address: user.bill_address }.to_json
23
25
  }
24
26
  end
25
27
  else
@@ -32,12 +34,13 @@ class Spree::Admin::UserSessionsController < Devise::SessionsController
32
34
  end
33
35
 
34
36
  private
35
- def accurate_title
36
- I18n.t('spree.login')
37
- end
38
37
 
39
- def redirect_back_or_default(default)
40
- redirect_to(session["spree_user_return_to"] || default)
41
- session["spree_user_return_to"] = nil
42
- end
38
+ def accurate_title
39
+ I18n.t('spree.login')
40
+ end
41
+
42
+ def redirect_back_or_default(default)
43
+ redirect_to(session["spree_user_return_to"] || default)
44
+ session["spree_user_return_to"] = nil
45
+ end
43
46
  end
@@ -1,27 +1,32 @@
1
- Spree::CheckoutController.class_eval do
2
- prepend_before_action :check_registration,
3
- except: [:registration, :update_registration]
4
- prepend_before_action :check_authorization
1
+ # frozen_string_literal: true
5
2
 
6
- # This action builds some associations on the order, ex. addresses, which we
7
- # don't to build or save here.
8
- skip_before_action :setup_for_current_state, only: [:registration, :update_registration]
3
+ module Spree
4
+ module CheckoutControllerDecorator
5
+ def self.prepended(base)
6
+ base.before_action :check_registration, except: [:registration, :update_registration]
7
+ base.before_action :check_authorization
9
8
 
10
- def registration
11
- @user = Spree::User.new
12
- end
9
+ # This action builds some associations on the order, ex. addresses, which we
10
+ # don't to build or save here.
11
+ base.skip_before_action :setup_for_current_state, only: [:registration, :update_registration]
12
+ end
13
13
 
14
- def update_registration
15
- if params[:order][:email] =~ Devise.email_regexp && current_order.update_attributes(email: params[:order][:email])
16
- redirect_to spree.checkout_path
17
- else
18
- flash[:registration_error] = t(:email_is_invalid, scope: [:errors, :messages])
14
+ def registration
19
15
  @user = Spree::User.new
20
- render 'registration'
21
16
  end
22
- end
23
17
 
24
- private
18
+ def update_registration
19
+ if params[:order][:email] =~ Devise.email_regexp && current_order.update(email: params[:order][:email])
20
+ redirect_to spree.checkout_path
21
+ else
22
+ flash[:registration_error] = t(:email_is_invalid, scope: [:errors, :messages])
23
+ @user = Spree::User.new
24
+ render 'registration'
25
+ end
26
+ end
27
+
28
+ private
29
+
25
30
  def order_params
26
31
  params.
27
32
  fetch(:order, {}).
@@ -39,6 +44,7 @@ Spree::CheckoutController.class_eval do
39
44
  # Introduces a registration step whenever the +registration_step+ preference is true.
40
45
  def check_registration
41
46
  return unless registration_required?
47
+
42
48
  store_location
43
49
  redirect_to spree.checkout_registration_path
44
50
  end
@@ -53,7 +59,7 @@ Spree::CheckoutController.class_eval do
53
59
  end
54
60
 
55
61
  def guest_authenticated?
56
- current_order.try!(:email).present? &&
62
+ current_order&.email.present? &&
57
63
  Spree::Config[:allow_guest_checkout]
58
64
  end
59
65
 
@@ -61,6 +67,10 @@ Spree::CheckoutController.class_eval do
61
67
  # are redirected to the tokenized order url unless authenticated as a registered user.
62
68
  def completion_route
63
69
  return spree.order_path(@order) if spree_current_user
70
+
64
71
  spree.token_order_path(@order, @order.guest_token)
65
72
  end
73
+
74
+ ::Spree::CheckoutController.prepend self
75
+ end
66
76
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Spree::UserConfirmationsController < Devise::ConfirmationsController
2
4
  helper 'spree/base', 'spree/store'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Spree::UserPasswordsController < Devise::PasswordsController
2
4
  helper 'spree/base', 'spree/store'
3
5
 
@@ -16,8 +18,9 @@ class Spree::UserPasswordsController < Devise::PasswordsController
16
18
  def create
17
19
  self.resource = resource_class.send_reset_password_instructions(params[resource_name])
18
20
 
21
+ set_flash_message(:notice, :send_instructions) if is_navigational_format?
22
+
19
23
  if resource.errors.empty?
20
- set_flash_message(:notice, :send_instructions) if is_navigational_format?
21
24
  respond_with resource, location: spree.login_path
22
25
  else
23
26
  respond_with_navigational(resource) { render :new }
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Spree::UserRegistrationsController < Devise::RegistrationsController
2
4
  helper 'spree/base', 'spree/store'
3
5
 
@@ -25,6 +27,7 @@ class Spree::UserRegistrationsController < Devise::RegistrationsController
25
27
  end
26
28
 
27
29
  protected
30
+
28
31
  def translation_scope
29
32
  'devise.user_registrations'
30
33
  end
@@ -34,6 +37,7 @@ class Spree::UserRegistrationsController < Devise::RegistrationsController
34
37
  end
35
38
 
36
39
  private
40
+
37
41
  def spree_user_params
38
42
  params.require(:spree_user).permit(Spree::PermittedAttributes.user_attributes | [:email])
39
43
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Spree::UserSessionsController < Devise::SessionsController
2
4
  helper 'spree/base', 'spree/store'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Spree::UsersController < Spree::StoreController
2
4
  skip_before_action :set_current_order, only: :show, raise: false
3
5
  prepend_before_action :load_object, only: [:show, :edit, :update]
@@ -24,7 +26,7 @@ class Spree::UsersController < Spree::StoreController
24
26
  end
25
27
 
26
28
  def update
27
- if @user.update_attributes(user_params)
29
+ if @user.update(user_params)
28
30
  spree_current_user.reload
29
31
 
30
32
  if params[:user][:password].present?
@@ -40,20 +42,21 @@ class Spree::UsersController < Spree::StoreController
40
42
  end
41
43
 
42
44
  private
43
- def user_params
44
- params.require(:user).permit(Spree::PermittedAttributes.user_attributes | [:email])
45
- end
46
45
 
47
- def load_object
48
- @user ||= Spree::User.find_by(id: spree_current_user&.id)
49
- authorize! params[:action].to_sym, @user
50
- end
46
+ def user_params
47
+ params.require(:user).permit(Spree::PermittedAttributes.user_attributes | [:email])
48
+ end
51
49
 
52
- def authorize_actions
53
- authorize! params[:action].to_sym, Spree::User.new
54
- end
50
+ def load_object
51
+ @user ||= Spree::User.find_by(id: spree_current_user&.id)
52
+ authorize! params[:action].to_sym, @user
53
+ end
55
54
 
56
- def accurate_title
57
- I18n.t('spree.my_account')
58
- end
55
+ def authorize_actions
56
+ authorize! params[:action].to_sym, Spree::User.new
57
+ end
58
+
59
+ def accurate_title
60
+ I18n.t('spree.my_account')
61
+ end
59
62
  end
@@ -1,10 +1,12 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Solidus
2
4
  module Auth
3
5
  module Generators
4
6
  class InstallGenerator < Rails::Generators::Base
5
7
  def self.source_paths
6
- paths = self.superclass.source_paths
7
- paths << File.expand_path('../templates', __FILE__)
8
+ paths = superclass.source_paths
9
+ paths << File.expand_path('templates', __dir__)
8
10
  paths.flatten
9
11
  end
10
12
 
@@ -1 +1,3 @@
1
+ # frozen_string_literal: true
2
+
1
3
  Devise.secret_key = SecureRandom.hex(50).inspect
data/lib/solidus/auth.rb CHANGED
@@ -1,2 +1,4 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # This file is required by the dummy app's config/environment
2
4
  require "solidus_auth_devise"
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "spree_core"
2
4
  require "solidus_support"
3
5
  require "spree/auth/devise"