@@ -550,7 +550,40 @@ def post(self, request, attribute_mapping=None, create_unknown_user=None):
550
550
if callable (create_unknown_user ):
551
551
create_unknown_user = create_unknown_user ()
552
552
553
+ try :
554
+ user = self .authenticate_user (
555
+ request ,
556
+ session_info ,
557
+ attribute_mapping ,
558
+ create_unknown_user ,
559
+ assertion_info
560
+ )
561
+ except PermissionDenied as e :
562
+ return self .handle_acs_failure (
563
+ request ,
564
+ exception = e ,
565
+ session_info = session_info ,
566
+ )
567
+
568
+ relay_state = self .build_relay_state ()
569
+ custom_redirect_url = self .custom_redirect (user , relay_state , session_info )
570
+ if custom_redirect_url :
571
+ return HttpResponseRedirect (custom_redirect_url )
572
+ relay_state = validate_referral_url (request , relay_state )
573
+ logger .debug ("Redirecting to the RelayState: %s" , relay_state )
574
+ return HttpResponseRedirect (relay_state )
575
+
576
+ def authenticate_user (
577
+ self ,
578
+ request ,
579
+ session_info ,
580
+ attribute_mapping ,
581
+ create_unknown_user ,
582
+ assertion_info
583
+ ):
584
+ """Calls Django's authenticate method after the SAML response is verified"""
553
585
logger .debug ("Trying to authenticate the user. Session info: %s" , session_info )
586
+
554
587
user = auth .authenticate (
555
588
request = request ,
556
589
session_info = session_info ,
@@ -563,11 +596,7 @@ def post(self, request, attribute_mapping=None, create_unknown_user=None):
563
596
"Could not authenticate user received in SAML Assertion. Session info: %s" ,
564
597
session_info ,
565
598
)
566
- return self .handle_acs_failure (
567
- request ,
568
- exception = PermissionDenied ("No user could be authenticated." ),
569
- session_info = session_info ,
570
- )
599
+ raise PermissionDenied ("No user could be authenticated." )
571
600
572
601
auth .login (self .request , user )
573
602
_set_subject_id (request .saml_session , session_info ["name_id" ])
@@ -576,13 +605,7 @@ def post(self, request, attribute_mapping=None, create_unknown_user=None):
576
605
self .post_login_hook (request , user , session_info )
577
606
self .customize_session (user , session_info )
578
607
579
- relay_state = self .build_relay_state ()
580
- custom_redirect_url = self .custom_redirect (user , relay_state , session_info )
581
- if custom_redirect_url :
582
- return HttpResponseRedirect (custom_redirect_url )
583
- relay_state = validate_referral_url (request , relay_state )
584
- logger .debug ("Redirecting to the RelayState: %s" , relay_state )
585
- return HttpResponseRedirect (relay_state )
608
+ return user
586
609
587
610
def post_login_hook (
588
611
self , request : HttpRequest , user : settings .AUTH_USER_MODEL , session_info : dict
0 commit comments