Skip to content
This repository was archived by the owner on Feb 8, 2026. It is now read-only.

Commit e44f653

Browse files
Merge pull request #463 from offmango/fix_guest_token_errors_when_upgrading_spree
Fixes errors around guest_token when upgrading to Spree 3.7
2 parents a718402 + f408ced commit e44f653

2 files changed

Lines changed: 24 additions & 8 deletions

File tree

config/initializers/warden.rb

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,14 @@
11
# Merges users orders to their account after sign in and sign up.
22
Warden::Manager.after_set_user except: :fetch do |user, auth, _opts|
3-
guest_token = auth.cookies.signed[:guest_token]
4-
token = auth.cookies.signed[:token]
3+
token = auth.cookies.signed[:guest_token] || auth.cookies.signed[:token]
4+
token_attr = Spree::Order.has_attribute?(:token) ? :token : :guest_token
55

66
if token.present? && user.is_a?(Spree::User)
7-
Spree::Order.incomplete.where(token: token, user_id: nil).each do |order|
8-
order.associate_user!(user)
9-
end
10-
elsif guest_token.present? && user.is_a?(Spree::User)
11-
Spree::Order.incomplete.where(guest_token: guest_token, user_id: nil).each do |order|
7+
Spree::Order.incomplete.where(token_attr => token, user_id: nil).each do |order|
128
order.associate_user!(user)
139
end
1410
end
15-
end
11+
end
1612

1713
Warden::Manager.before_logout do |_user, auth, _opts|
1814
auth.cookies.delete(:guest_token)

spec/controllers/spree/user_sessions_controller_spec.rb

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,26 @@
132132
end
133133
end
134134

135+
context 'with a guest_token from a pre-3.7 version of Spree present' do
136+
before do
137+
request.cookie_jar.signed[:guest_token] = 'ABC'
138+
request.cookie_jar.signed[:token] = 'DEF'
139+
end
140+
141+
it 'assigns the correct token attribute for the order' do
142+
if Spree.version.to_f > 3.6
143+
order = create(:order, email: user.email, token: 'ABC', user_id: nil, created_by_id: nil)
144+
else
145+
order = create(:order, email: user.email, guest_token: 'ABC', user_id: nil, created_by_id: nil)
146+
end
147+
spree_post :create, spree_user: { email: user.email, password: 'secret' }
148+
149+
order.reload
150+
expect(order.user_id).to eq user.id
151+
expect(order.created_by_id).to eq user.id
152+
end
153+
end
154+
135155
context "and html format is used" do
136156
it "redirects to default after signing in" do
137157
spree_post :create, spree_user: { email: user.email, password: 'secret' }

0 commit comments

Comments
 (0)