11class Users ::SessionsController < Devise ::SessionsController
2+ include Devise ::Controllers ::Rememberable
3+
24 protect_from_forgery except : [ :create ]
35
46 mattr_accessor :first_factor , default : [ ] , instance_writer : false , instance_reader : false
57
68 # Any changes made here may also require changes to Users::SamlSessionsController#create.
79 def create
810 super do |user |
9- return unless post_sign_in ( user )
11+ remember_me = remember_me_is_active? ( user )
12+ return unless post_sign_in ( user , remember_me )
1013 end
1114 end
1215
@@ -29,10 +32,15 @@ def verify_code
2932 'a backup code. Please re-configure two-factor authentication via your profile.'
3033 end
3134
35+ if params [ :remember_me ] == 'true'
36+ remember_me ( target_user )
37+ end
38+
3239 AuditLog . user_history ( event_type : 'two_factor_success' , related : target_user )
3340 @@first_factor . delete params [ :uid ] . to_i
41+
3442 flash [ :info ] = 'Signed in successfully.'
35- sign_in_and_redirect target_user
43+ sign_in_and_redirect ( target_user )
3644 else
3745 AuditLog . user_history ( event_type : 'two_factor_fail' , related : target_user , comment : 'first factor not present' )
3846 flash [ :danger ] = "You haven't entered your password yet."
@@ -56,9 +64,10 @@ def verify_code
5664 #
5765 # In general, this method should have similar behavior to the Users::SamlSessionsController#post_sign_in method.
5866 # If you make changes here, you may also have to update that method.
59- # @param user [User]
67+ # @param user [User] currently signed in user
68+ # @param remember_me [Boolean] whether the user should be remembered after special conditions
6069 # @return [Boolean] false if the handling by the calling method should be stopped
61- def post_sign_in ( user )
70+ def post_sign_in ( user , remember_me = false )
6271 # For a deleted user (banished), tell them non-specifically that there was a mistake with their credentials.
6372 if user . deleted?
6473 sign_out user
@@ -88,20 +97,20 @@ def post_sign_in(user)
8897
8998 # Enforce 2FA
9099 if user . enabled_2fa
91- handle_2fa_login ( user )
100+ handle_2fa_login ( user , remember_me )
92101 return false
93102 end
94103
95104 true
96105 end
97106
98- def handle_2fa_login ( user )
107+ def handle_2fa_login ( user , remember_me = false )
99108 sign_out user
100109 case user . two_factor_method
101110 when 'app'
102111 id = user . id
103112 @@first_factor << id
104- redirect_to login_verify_2fa_path ( uid : id )
113+ redirect_to login_verify_2fa_path ( uid : id , remember_me : remember_me )
105114 when 'email'
106115 TwoFactorMailer . with ( user : user , host : request . hostname ) . login_email . deliver_now
107116 flash [ :notice ] = nil
0 commit comments