@@ -265,10 +265,19 @@ def validate_logout_request(request, id_token_hint, client_id, post_logout_redir
265265class  RPInitiatedLogoutView (OIDCLogoutOnlyMixin , FormView ):
266266    template_name  =  "oauth2_provider/logout_confirm.html" 
267267    form_class  =  ConfirmLogoutForm 
268-     token_types_to_delete  =  [
268+     # Only delete tokens for Application whose client type and authorization 
269+     # grant type are in the respective lists. 
270+     token_deletion_client_types  =  [
269271        Application .CLIENT_PUBLIC ,
270272        Application .CLIENT_CONFIDENTIAL ,
271273    ]
274+     token_deletion_grant_types  =  [
275+         Application .GRANT_AUTHORIZATION_CODE ,
276+         Application .GRANT_IMPLICIT ,
277+         Application .GRANT_PASSWORD ,
278+         Application .GRANT_CLIENT_CREDENTIALS ,
279+         Application .GRANT_OPENID_HYBRID ,
280+     ]
272281
273282    def  get_initial (self ):
274283        return  {
@@ -344,7 +353,9 @@ def do_logout(self, application=None, post_logout_redirect_uri=None, state=None)
344353            AccessToken  =  get_access_token_model ()
345354            RefreshToken  =  get_refresh_token_model ()
346355            access_tokens_to_delete  =  AccessToken .objects .filter (
347-                 user = self .request .user , application__client_type__in = self .token_types_to_delete 
356+                 user = self .request .user ,
357+                 application__client_type__in = self .token_deletion_client_types ,
358+                 application__authorization_grant_type__in = self .token_deletion_grant_types ,
348359            )
349360            # This queryset has to be evaluated eagerly. The queryset would be empty with lazy evaluation 
350361            # because `access_tokens_to_delete` represents an empty queryset once `refresh_tokens_to_delete` 
0 commit comments