@@ -550,7 +550,40 @@ def post(self, request, attribute_mapping=None, create_unknown_user=None):
550550 if callable (create_unknown_user ):
551551 create_unknown_user = create_unknown_user ()
552552
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"""
553585 logger .debug ("Trying to authenticate the user. Session info: %s" , session_info )
586+
554587 user = auth .authenticate (
555588 request = request ,
556589 session_info = session_info ,
@@ -563,11 +596,7 @@ def post(self, request, attribute_mapping=None, create_unknown_user=None):
563596 "Could not authenticate user received in SAML Assertion. Session info: %s" ,
564597 session_info ,
565598 )
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." )
571600
572601 auth .login (self .request , user )
573602 _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):
576605 self .post_login_hook (request , user , session_info )
577606 self .customize_session (user , session_info )
578607
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
586609
587610 def post_login_hook (
588611 self , request : HttpRequest , user : settings .AUTH_USER_MODEL , session_info : dict
0 commit comments