Skip to content

Commit 22bd2ce

Browse files
cpfergus1elia
andcommitted
Remove #redirect_back_or_default
With the deprecation of #redirect_back_or_default in solidus 4.0, we can utilize Devise helpers store_location_for and stored_location_for to provide the same functionality. Co-Authored-By: Elia Schito <elia@schito.me>
1 parent bb291bd commit 22bd2ce

4 files changed

Lines changed: 28 additions & 13 deletions

File tree

lib/controllers/backend/spree/admin/user_sessions_controller.rb

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ def create
1717
respond_to do |format|
1818
format.html {
1919
flash[:success] = I18n.t('spree.logged_in_succesfully')
20-
redirect_back_or_default(after_sign_in_path_for(spree_current_user))
20+
redirect_to stored_spree_user_location_or(after_sign_in_path_for(spree_current_user))
2121
}
2222
format.js {
2323
user = resource.record
@@ -47,9 +47,4 @@ def set_user_language_locale_key
4747
def accurate_title
4848
I18n.t('spree.login')
4949
end
50-
51-
def redirect_back_or_default(default)
52-
redirect_to(session["spree_user_return_to"] || default)
53-
session["spree_user_return_to"] = nil
54-
end
5550
end

lib/controllers/frontend/spree/user_sessions_controller.rb

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ def create
1919
respond_to do |format|
2020
format.html do
2121
flash[:success] = I18n.t('spree.logged_in_succesfully')
22-
redirect_back_or_default(after_sign_in_path_for(spree_current_user))
22+
redirect_to stored_spree_user_location_or(after_sign_in_path_for(spree_current_user))
2323
end
2424
format.js { render success_json }
2525
end
@@ -49,11 +49,6 @@ def accurate_title
4949
I18n.t('spree.login')
5050
end
5151

52-
def redirect_back_or_default(default)
53-
redirect_to(session["spree_user_return_to"] || default)
54-
session["spree_user_return_to"] = nil
55-
end
56-
5752
def success_json
5853
{
5954
json: {

lib/controllers/frontend/spree/users_controller.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ def create
1717
session[:guest_token] = nil
1818
end
1919

20-
redirect_back_or_default(root_url)
20+
redirect_to stored_spree_user_location_or(root_url)
2121
else
2222
render :new
2323
end

lib/spree/authentication_helpers.rb

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,5 +23,30 @@ def spree_current_user
2323
to: :spree,
2424
prefix: :spree
2525
end
26+
27+
private
28+
29+
def authenticate_spree_user!
30+
store_spree_user_location! if storable_spree_user_location?
31+
32+
super
33+
end
34+
35+
# It's important that the location is NOT stored if:
36+
# - The request method is not GET (non idempotent)
37+
# - The request is handled by a Devise controller such as Devise::SessionsController as that could cause an
38+
# infinite redirect loop.
39+
# - The request is an Ajax request as this can lead to very unexpected behaviour.
40+
def storable_spree_user_location?
41+
request.get? && is_navigational_format? && !devise_controller? && !request.xhr?
42+
end
43+
44+
def store_spree_user_location!
45+
store_location_for(:spree_current_user, request.fullpath)
46+
end
47+
48+
def stored_spree_user_location_or(fallback_location)
49+
stored_location_for(:spree_current_user) || fallback_location
50+
end
2651
end
2752
end

0 commit comments

Comments
 (0)