spree_auth_devise 4.1.0.rc1 → 4.3.2
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of spree_auth_devise might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/.travis.yml +32 -23
- data/Appraisals +1 -1
- data/README.md +3 -12
- data/Rakefile +9 -3
- data/app/controllers/spree/api/v2/storefront/account_confirmations_controller.rb +20 -0
- data/app/controllers/spree/api/v2/storefront/passwords_controller.rb +35 -0
- data/app/controllers/spree/user_confirmations_controller.rb +45 -1
- data/app/controllers/spree/user_passwords_controller.rb +15 -1
- data/app/controllers/spree/user_registrations_controller.rb +33 -1
- data/app/controllers/spree/user_sessions_controller.rb +8 -0
- data/app/mailers/spree/user_mailer.rb +11 -4
- data/app/models/spree/user.rb +42 -0
- data/app/services/spree/account/create.rb +19 -0
- data/app/services/spree/account/update.rb +17 -0
- data/app/views/spree/user_mailer/confirmation_instructions.html.erb +20 -0
- data/app/views/spree/user_mailer/confirmation_instructions.text.erb +8 -5
- data/app/views/spree/user_mailer/reset_password_instructions.html.erb +20 -0
- data/app/views/spree/user_mailer/reset_password_instructions.text.erb +7 -5
- data/app/views/spree/user_passwords/new.html.erb +2 -3
- data/config/locales/de.yml +16 -0
- data/config/locales/en.yml +21 -6
- data/config/locales/zh-TW.yml +58 -0
- data/config/routes.rb +12 -2
- data/db/migrate/20120203010234_add_reset_password_sent_at_to_spree_users.rb +2 -2
- data/gemfiles/spree_4_1.gemfile +1 -1
- data/lib/controllers/api/spree/api/v2/storefront/account_controller_decorator.rb +41 -0
- data/lib/controllers/frontend/spree/checkout_controller_decorator.rb +3 -2
- data/lib/controllers/frontend/spree/users_controller.rb +3 -3
- data/lib/spree/auth/engine.rb +14 -1
- data/lib/spree_auth_devise.rb +0 -1
- data/lib/views/backend/spree/admin/user_passwords/new.html.erb +1 -1
- data/lib/views/backend/spree/admin/user_sessions/new.html.erb +1 -1
- data/spec/controllers/spree/api/v2/storefront/passwords_controller_spec.rb +63 -0
- data/spec/controllers/spree/user_registrations_controller_spec.rb +1 -1
- data/spec/features/admin/sign_in_spec.rb +8 -2
- data/spec/features/checkout_spec.rb +4 -4
- data/spec/features/confirmation_spec.rb +3 -3
- data/spec/features/sign_in_spec.rb +13 -7
- data/spec/features/sign_out_spec.rb +1 -3
- data/spec/features/sign_up_spec.rb +2 -2
- data/spec/mailers/user_mailer_spec.rb +3 -3
- data/spec/models/user_spec.rb +10 -8
- data/spec/requests/spree/api/v2/storefront/account_confirmation_spec.rb +48 -0
- data/spec/requests/spree/api/v2/storefront/account_spec.rb +101 -0
- data/spec/spec_helper.rb +7 -38
- data/spree_auth_devise.gemspec +12 -29
- metadata +29 -359
- data/app/overrides/spree/admin/shared/_header/auth_admin_login_navigation_bar.html.erb.deface +0 -4
- data/spec/support/add_to_cart.rb +0 -22
- data/spec/support/authentication_helpers.rb +0 -14
- data/spec/support/cache_helpers.rb +0 -5
- data/spec/support/capybara.rb +0 -23
- data/spec/support/database_cleaner.rb +0 -17
- data/spec/support/factory_girl.rb +0 -5
- data/spec/support/spree.rb +0 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 632dbf0ba8467163e8cff132261a9173f5c4a9b9b670c3e93599d66bb07575a1
|
4
|
+
data.tar.gz: 2e400ddce6368507961c686f4e094eb9c09ab47ebb8ecd97ade3c1f425e5ce5d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b07a757183970dc752ad4187daf50acca0783f1914ee4f0ed99a68f533a5e98ee5525dac009bd509760f70c74577f3f6de0d3acf30060bd4319f1b24a495bd02
|
7
|
+
data.tar.gz: 1c0fb11dbf07ed2c308a7bd693118254a933c5204e535d0765958679ae6576a098f71671eb18c42b7943e7b1fd18af32eaf1b8273664090e6a8e7dd625a804b6
|
data/.travis.yml
CHANGED
@@ -1,38 +1,47 @@
|
|
1
|
-
|
2
|
-
dist:
|
3
|
-
|
4
|
-
script:
|
5
|
-
- bundle exec rake test_app
|
6
|
-
- bundle exec rake spec
|
1
|
+
os: linux
|
2
|
+
dist: bionic
|
7
3
|
|
8
4
|
addons:
|
9
|
-
|
10
|
-
|
5
|
+
apt:
|
6
|
+
sources:
|
7
|
+
- google-chrome
|
8
|
+
packages:
|
9
|
+
- google-chrome-stable
|
11
10
|
|
12
|
-
|
13
|
-
-
|
14
|
-
-
|
11
|
+
services:
|
12
|
+
- mysql
|
13
|
+
- postgresql
|
15
14
|
|
16
15
|
language: ruby
|
17
16
|
|
18
17
|
rvm:
|
19
|
-
- 2.
|
20
|
-
|
18
|
+
- 2.7
|
19
|
+
- 3.0
|
20
|
+
|
21
|
+
env:
|
22
|
+
- DB=mysql
|
23
|
+
- DB=postgres
|
21
24
|
|
22
25
|
gemfile:
|
23
26
|
- gemfiles/spree_4_1.gemfile
|
24
27
|
- gemfiles/spree_master.gemfile
|
25
28
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
+
jobs:
|
30
|
+
exclude:
|
31
|
+
- rvm: 3.0
|
32
|
+
gemfile: gemfiles/spree_4_1.gemfile
|
33
|
+
allow_failures:
|
34
|
+
- gemfile: gemfiles/spree_master.gemfile
|
29
35
|
|
30
36
|
before_install:
|
31
|
-
- gem update bundler
|
32
37
|
- mysql -u root -e "GRANT ALL ON *.* TO 'travis'@'%';"
|
33
|
-
|
34
|
-
|
35
|
-
-
|
36
|
-
-
|
37
|
-
-
|
38
|
-
-
|
38
|
+
|
39
|
+
before_script:
|
40
|
+
- CHROME_MAIN_VERSION=`google-chrome-stable --version | sed -E 's/(^Google Chrome |\.[0-9]+ )//g'`
|
41
|
+
- CHROMEDRIVER_VERSION=`curl -s "https://chromedriver.storage.googleapis.com/LATEST_RELEASE_$CHROME_MAIN_VERSION"`
|
42
|
+
- curl "https://chromedriver.storage.googleapis.com/${CHROMEDRIVER_VERSION}/chromedriver_linux64.zip" -O
|
43
|
+
- unzip chromedriver_linux64.zip -d ~/bin
|
44
|
+
|
45
|
+
script:
|
46
|
+
- bundle exec rake test_app
|
47
|
+
- bundle exec rake spec
|
data/Appraisals
CHANGED
data/README.md
CHANGED
@@ -10,20 +10,11 @@ Provides authentication services for [Spree](https://spreecommerce.org), using t
|
|
10
10
|
|
11
11
|
1. Add this extension to your Gemfile with this line:
|
12
12
|
|
13
|
-
#### Spree >= 3.1
|
14
|
-
|
15
|
-
```ruby
|
16
|
-
gem 'spree_auth_devise', '~> 3.3'
|
17
|
-
```
|
18
|
-
|
19
|
-
#### Spree 3.0 and Spree 2.x
|
20
|
-
|
21
13
|
```ruby
|
22
|
-
gem 'spree_auth_devise'
|
14
|
+
gem 'spree_auth_devise'
|
23
15
|
```
|
24
|
-
|
25
|
-
|
26
|
-
For example, use `3-0-stable` if you're using Spree `3-0-stable` or any `3.0.x` version.
|
16
|
+
|
17
|
+
if you run into any version-mismatch problems please run `bundle update`
|
27
18
|
|
28
19
|
2. Install the gem using Bundler:
|
29
20
|
```ruby
|
data/Rakefile
CHANGED
@@ -2,14 +2,20 @@ require 'bundler'
|
|
2
2
|
Bundler::GemHelper.install_tasks
|
3
3
|
|
4
4
|
require 'rspec/core/rake_task'
|
5
|
-
require 'spree/testing_support/
|
5
|
+
require 'spree/testing_support/extension_rake'
|
6
6
|
|
7
7
|
RSpec::Core::RakeTask.new
|
8
8
|
|
9
|
-
task default
|
9
|
+
task :default do
|
10
|
+
if Dir["spec/dummy"].empty?
|
11
|
+
Rake::Task[:test_app].invoke
|
12
|
+
Dir.chdir("../../")
|
13
|
+
end
|
14
|
+
Rake::Task[:spec].invoke
|
15
|
+
end
|
10
16
|
|
11
17
|
desc 'Generates a dummy app for testing'
|
12
18
|
task :test_app do
|
13
19
|
ENV['LIB_NAME'] = 'spree/auth'
|
14
|
-
Rake::Task['
|
20
|
+
Rake::Task['extension:test_app'].invoke
|
15
21
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Spree
|
2
|
+
module Api
|
3
|
+
module V2
|
4
|
+
module Storefront
|
5
|
+
class AccountConfirmationsController < ::Spree::Api::V2::BaseController
|
6
|
+
|
7
|
+
def show
|
8
|
+
user = Spree.user_class.confirm_by_token(params[:id])
|
9
|
+
|
10
|
+
if user.errors.empty?
|
11
|
+
render json: { data: { state: user.respond_to?(:state) ? user.state : '' } }, status: :ok
|
12
|
+
else
|
13
|
+
render json: { error: user.errors.full_messages.to_sentence }, status: :unprocessable_entity
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Spree
|
2
|
+
module Api
|
3
|
+
module V2
|
4
|
+
module Storefront
|
5
|
+
class PasswordsController < ::Spree::Api::V2::BaseController
|
6
|
+
include Spree::Core::ControllerHelpers::Store
|
7
|
+
|
8
|
+
def create
|
9
|
+
user = Spree.user_class.find_by(email: params[:user][:email])
|
10
|
+
|
11
|
+
if user&.send_reset_password_instructions(current_store)
|
12
|
+
head :ok
|
13
|
+
else
|
14
|
+
head :not_found
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def update
|
19
|
+
user = Spree.user_class.reset_password_by_token(
|
20
|
+
password: params[:user][:password],
|
21
|
+
password_confirmation: params[:user][:password_confirmation],
|
22
|
+
reset_password_token: params[:id]
|
23
|
+
)
|
24
|
+
|
25
|
+
if user.errors.empty?
|
26
|
+
head :ok
|
27
|
+
else
|
28
|
+
render json: { error: user.errors.full_messages.to_sentence }, status: :unprocessable_entity
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -6,8 +6,52 @@ class Spree::UserConfirmationsController < Devise::ConfirmationsController
|
|
6
6
|
include Spree::Core::ControllerHelpers::Order
|
7
7
|
include Spree::Core::ControllerHelpers::Store
|
8
8
|
|
9
|
+
if defined?(Spree::Core::ControllerHelpers::Currency)
|
10
|
+
include Spree::Core::ControllerHelpers::Currency
|
11
|
+
end
|
12
|
+
|
13
|
+
if defined?(Spree::Core::ControllerHelpers::Locale)
|
14
|
+
include Spree::Core::ControllerHelpers::Locale
|
15
|
+
end
|
16
|
+
|
9
17
|
before_action :set_current_order
|
10
|
-
|
18
|
+
|
19
|
+
if Spree.version.to_f >= 4.2
|
20
|
+
# POST /resource/confirmation
|
21
|
+
def create
|
22
|
+
self.resource = resource_class.send_confirmation_instructions(resource_params, current_store)
|
23
|
+
yield resource if block_given?
|
24
|
+
|
25
|
+
if successfully_sent?(resource)
|
26
|
+
respond_with({}, location: after_resending_confirmation_instructions_path_for(resource_name))
|
27
|
+
else
|
28
|
+
respond_with(resource)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
# GET /resource/confirmation?confirmation_token=abcdef
|
34
|
+
def show
|
35
|
+
self.resource = resource_class.confirm_by_token(params[:confirmation_token])
|
36
|
+
yield resource if block_given?
|
37
|
+
|
38
|
+
if resource.errors.empty?
|
39
|
+
set_flash_message!(:notice, :confirmed)
|
40
|
+
respond_with_navigational(resource) do
|
41
|
+
redirect_to after_confirmation_path_for(resource_name, resource)
|
42
|
+
end
|
43
|
+
elsif resource.confirmed?
|
44
|
+
set_flash_message(:error, :already_confirmed)
|
45
|
+
respond_with_navigational(resource) do
|
46
|
+
redirect_to after_confirmation_path_for(resource_name, resource)
|
47
|
+
end
|
48
|
+
else
|
49
|
+
respond_with_navigational(resource.errors, status: :unprocessable_entity) do
|
50
|
+
render :new
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
11
55
|
protected
|
12
56
|
|
13
57
|
def after_confirmation_path_for(resource_name, resource)
|
@@ -6,6 +6,14 @@ class Spree::UserPasswordsController < Devise::PasswordsController
|
|
6
6
|
include Spree::Core::ControllerHelpers::Order
|
7
7
|
include Spree::Core::ControllerHelpers::Store
|
8
8
|
|
9
|
+
if defined?(Spree::Core::ControllerHelpers::Currency)
|
10
|
+
include Spree::Core::ControllerHelpers::Currency
|
11
|
+
end
|
12
|
+
|
13
|
+
if defined?(Spree::Core::ControllerHelpers::Locale)
|
14
|
+
include Spree::Core::ControllerHelpers::Locale
|
15
|
+
end
|
16
|
+
|
9
17
|
if defined?(SpreeI18n::ControllerLocaleHelper)
|
10
18
|
include SpreeI18n::ControllerLocaleHelper
|
11
19
|
end
|
@@ -20,7 +28,7 @@ class Spree::UserPasswordsController < Devise::PasswordsController
|
|
20
28
|
# respond_with resource, :location => spree.login_path
|
21
29
|
#
|
22
30
|
def create
|
23
|
-
self.resource = resource_class.send_reset_password_instructions(params[resource_name])
|
31
|
+
self.resource = resource_class.send_reset_password_instructions(params[resource_name], current_store)
|
24
32
|
|
25
33
|
if resource.errors.empty?
|
26
34
|
set_flash_message(:notice, :send_instructions) if is_navigational_format?
|
@@ -53,4 +61,10 @@ class Spree::UserPasswordsController < Devise::PasswordsController
|
|
53
61
|
def new_session_path(resource_name)
|
54
62
|
spree.send("new_#{resource_name}_session_path")
|
55
63
|
end
|
64
|
+
|
65
|
+
private
|
66
|
+
|
67
|
+
def accurate_title
|
68
|
+
Spree.t(:reset_password)
|
69
|
+
end
|
56
70
|
end
|
@@ -6,6 +6,14 @@ class Spree::UserRegistrationsController < Devise::RegistrationsController
|
|
6
6
|
include Spree::Core::ControllerHelpers::Order
|
7
7
|
include Spree::Core::ControllerHelpers::Store
|
8
8
|
|
9
|
+
if defined?(Spree::Core::ControllerHelpers::Currency)
|
10
|
+
include Spree::Core::ControllerHelpers::Currency
|
11
|
+
end
|
12
|
+
|
13
|
+
if defined?(Spree::Core::ControllerHelpers::Locale)
|
14
|
+
include Spree::Core::ControllerHelpers::Locale
|
15
|
+
end
|
16
|
+
|
9
17
|
if defined?(SpreeI18n::ControllerLocaleHelper)
|
10
18
|
include SpreeI18n::ControllerLocaleHelper
|
11
19
|
end
|
@@ -23,6 +31,7 @@ class Spree::UserRegistrationsController < Devise::RegistrationsController
|
|
23
31
|
# POST /resource/sign_up
|
24
32
|
def create
|
25
33
|
@user = build_resource(spree_user_params)
|
34
|
+
resource.skip_confirmation_notification! if Spree::Auth::Config[:confirmable]
|
26
35
|
resource_saved = resource.save
|
27
36
|
yield resource if block_given?
|
28
37
|
if resource_saved
|
@@ -30,10 +39,12 @@ class Spree::UserRegistrationsController < Devise::RegistrationsController
|
|
30
39
|
set_flash_message :notice, :signed_up
|
31
40
|
sign_up(resource_name, resource)
|
32
41
|
session[:spree_user_signup] = true
|
33
|
-
|
42
|
+
resource.send_confirmation_instructions(current_store) if Spree::Auth::Config[:confirmable]
|
43
|
+
redirect_to_checkout_or_account_path(resource)
|
34
44
|
else
|
35
45
|
set_flash_message :notice, :"signed_up_but_#{resource.inactive_message}"
|
36
46
|
expire_data_after_sign_in!
|
47
|
+
resource.send_confirmation_instructions(current_store) if Spree::Auth::Config[:confirmable]
|
37
48
|
respond_with resource, location: after_inactive_sign_up_path_for(resource)
|
38
49
|
end
|
39
50
|
else
|
@@ -80,8 +91,19 @@ class Spree::UserRegistrationsController < Devise::RegistrationsController
|
|
80
91
|
after_sign_in_redirect(resource) if is_navigational_format?
|
81
92
|
end
|
82
93
|
|
94
|
+
def after_inactive_sign_up_path_for(resource)
|
95
|
+
scope = Devise::Mapping.find_scope!(resource)
|
96
|
+
router_name = Devise.mappings[scope].router_name
|
97
|
+
context = router_name ? send(router_name) : self
|
98
|
+
context.respond_to?(:login_path) ? context.login_path : "/login"
|
99
|
+
end
|
100
|
+
|
83
101
|
private
|
84
102
|
|
103
|
+
def accurate_title
|
104
|
+
Spree.t(:sign_up)
|
105
|
+
end
|
106
|
+
|
85
107
|
def spree_user_params
|
86
108
|
params.require(:spree_user).permit(Spree::PermittedAttributes.user_attributes)
|
87
109
|
end
|
@@ -89,4 +111,14 @@ class Spree::UserRegistrationsController < Devise::RegistrationsController
|
|
89
111
|
def after_sign_in_redirect(resource_or_scope)
|
90
112
|
stored_location_for(resource_or_scope) || account_path
|
91
113
|
end
|
114
|
+
|
115
|
+
def redirect_to_checkout_or_account_path(resource)
|
116
|
+
resource_path = after_sign_up_path_for(resource)
|
117
|
+
|
118
|
+
if resource_path == spree.checkout_state_path(:address)
|
119
|
+
respond_with resource, location: spree.checkout_state_path(:address)
|
120
|
+
else
|
121
|
+
respond_with resource, location: spree.account_path
|
122
|
+
end
|
123
|
+
end
|
92
124
|
end
|
@@ -6,6 +6,14 @@ class Spree::UserSessionsController < Devise::SessionsController
|
|
6
6
|
include Spree::Core::ControllerHelpers::Order
|
7
7
|
include Spree::Core::ControllerHelpers::Store
|
8
8
|
|
9
|
+
if defined?(Spree::Core::ControllerHelpers::Currency)
|
10
|
+
include Spree::Core::ControllerHelpers::Currency
|
11
|
+
end
|
12
|
+
|
13
|
+
if defined?(Spree::Core::ControllerHelpers::Locale)
|
14
|
+
include Spree::Core::ControllerHelpers::Locale
|
15
|
+
end
|
16
|
+
|
9
17
|
if defined?(SpreeI18n::ControllerLocaleHelper)
|
10
18
|
include SpreeI18n::ControllerLocaleHelper
|
11
19
|
end
|
@@ -1,16 +1,23 @@
|
|
1
1
|
module Spree
|
2
2
|
class UserMailer < BaseMailer
|
3
3
|
def reset_password_instructions(user, token, *_args)
|
4
|
-
|
4
|
+
current_store_id = _args.inject(:merge)[:current_store_id]
|
5
|
+
@current_store = Spree::Store.find(current_store_id) || Spree::Store.current
|
6
|
+
@locale = @current_store.has_attribute?(:default_locale) ? @current_store.default_locale : I18n.default_locale
|
7
|
+
I18n.locale = @locale if @locale.present?
|
8
|
+
@edit_password_reset_url = spree.edit_spree_user_password_url(reset_password_token: token, host: @current_store.url)
|
9
|
+
@user = user
|
5
10
|
|
6
|
-
mail to: user.email, from: from_address, subject:
|
11
|
+
mail to: user.email, from: from_address, subject: @current_store.name + ' ' + I18n.t(:subject, scope: [:devise, :mailer, :reset_password_instructions]), store_url: @current_store.url
|
7
12
|
end
|
8
13
|
|
9
14
|
def confirmation_instructions(user, token, _opts = {})
|
10
|
-
|
15
|
+
current_store_id = _opts[:current_store_id]
|
16
|
+
@current_store = Spree::Store.find(current_store_id) || Spree::Store.current
|
17
|
+
@confirmation_url = spree_user_confirmation_url(confirmation_token: token, host: Spree::Store.current.url)
|
11
18
|
@email = user.email
|
12
19
|
|
13
|
-
mail to: user.email, from: from_address, subject:
|
20
|
+
mail to: user.email, from: from_address, subject: @current_store.name + ' ' + I18n.t(:subject, scope: [:devise, :mailer, :confirmation_instructions]), store_url: @current_store.url
|
14
21
|
end
|
15
22
|
end
|
16
23
|
end
|
data/app/models/spree/user.rb
CHANGED
@@ -27,6 +27,48 @@ module Spree
|
|
27
27
|
has_spree_role?('admin')
|
28
28
|
end
|
29
29
|
|
30
|
+
def self.send_confirmation_instructions(attributes = {}, current_store)
|
31
|
+
confirmable = find_by_unconfirmed_email_with_errors(attributes) if reconfirmable
|
32
|
+
unless confirmable.try(:persisted?)
|
33
|
+
confirmable = find_or_initialize_with_errors(confirmation_keys, attributes, :not_found)
|
34
|
+
end
|
35
|
+
confirmable.resend_confirmation_instructions(current_store) if confirmable.persisted?
|
36
|
+
confirmable
|
37
|
+
end
|
38
|
+
|
39
|
+
def resend_confirmation_instructions(current_store)
|
40
|
+
pending_any_confirmation do
|
41
|
+
send_confirmation_instructions(current_store)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def send_confirmation_instructions(current_store)
|
46
|
+
unless @raw_confirmation_token
|
47
|
+
generate_confirmation_token!
|
48
|
+
end
|
49
|
+
|
50
|
+
opts = pending_reconfirmation? ? { to: unconfirmed_email } : {}
|
51
|
+
opts[:current_store_id] = current_store.id
|
52
|
+
send_devise_notification(:confirmation_instructions, @raw_confirmation_token, opts)
|
53
|
+
end
|
54
|
+
|
55
|
+
def self.send_reset_password_instructions(attributes={}, current_store)
|
56
|
+
recoverable = find_or_initialize_with_errors(reset_password_keys, attributes, :not_found)
|
57
|
+
recoverable.send_reset_password_instructions(current_store) if recoverable.persisted?
|
58
|
+
recoverable
|
59
|
+
end
|
60
|
+
|
61
|
+
def send_reset_password_instructions(current_store)
|
62
|
+
token = set_reset_password_token
|
63
|
+
send_reset_password_instructions_notification(token, current_store.id)
|
64
|
+
|
65
|
+
token
|
66
|
+
end
|
67
|
+
|
68
|
+
def send_reset_password_instructions_notification(token, current_store_id)
|
69
|
+
send_devise_notification(:reset_password_instructions, token, { current_store_id: current_store_id })
|
70
|
+
end
|
71
|
+
|
30
72
|
protected
|
31
73
|
|
32
74
|
def password_required?
|