3131
3232
3333class OAuth2Validator (RequestValidator ):
34+
35+ def _extract_token_user (self , token ):
36+ return token .user
37+
38+ def _extract_resource_owner (self , request ):
39+ return request .user
40+
3441 def _extract_basic_auth (self , request ):
3542 """
3643 Return authentication string if request contains basic auth credentials,
@@ -238,7 +245,7 @@ def validate_bearer_token(self, token, scopes, request):
238245 token = token )
239246 if access_token .is_valid (scopes ):
240247 request .client = access_token .application
241- request .user = access_token . user
248+ request .user = self . _extract_token_user ( access_token )
242249 request .scopes = scopes
243250
244251 # this is needed by django rest framework
@@ -253,7 +260,7 @@ def validate_code(self, client_id, code, client, request, *args, **kwargs):
253260 grant = Grant .objects .get (code = code , application = client )
254261 if not grant .is_expired ():
255262 request .scopes = grant .scope .split (' ' )
256- request .user = grant . user
263+ request .user = self . _extract_token_user ( grant )
257264 return True
258265 return False
259266
@@ -296,7 +303,7 @@ def validate_redirect_uri(self, client_id, redirect_uri, request, *args, **kwarg
296303 def save_authorization_code (self , client_id , code , request , * args , ** kwargs ):
297304 expires = timezone .now () + timedelta (
298305 seconds = oauth2_settings .AUTHORIZATION_CODE_EXPIRE_SECONDS )
299- g = Grant (application = request .client , user = request . user , code = code ['code' ],
306+ g = Grant (application = request .client , user = self . _extract_resource_owner ( request ) , code = code ['code' ],
300307 expires = expires , redirect_uri = request .redirect_uri ,
301308 scope = ' ' .join (request .scopes ))
302309 g .save ()
@@ -344,7 +351,7 @@ def save_bearer_token(self, token, request, *args, **kwargs):
344351 access_token = AccessToken .objects .select_for_update ().get (
345352 pk = refresh_token_instance .access_token .pk
346353 )
347- access_token .user = request . user
354+ access_token .user = self . _extract_resource_owner ( request )
348355 access_token .scope = token ['scope' ]
349356 access_token .expires = expires
350357 access_token .token = token ['access_token' ]
@@ -365,7 +372,7 @@ def save_bearer_token(self, token, request, *args, **kwargs):
365372 access_token = self ._create_access_token (expires , request , token )
366373
367374 refresh_token = RefreshToken (
368- user = request . user ,
375+ user = self . _extract_resource_owner ( request ) ,
369376 token = refresh_token_code ,
370377 application = request .client ,
371378 access_token = access_token
@@ -381,7 +388,7 @@ def save_bearer_token(self, token, request, *args, **kwargs):
381388
382389 def _create_access_token (self , expires , request , token ):
383390 access_token = AccessToken (
384- user = request . user ,
391+ user = self . _extract_resource_owner ( request ) ,
385392 scope = token ['scope' ],
386393 expires = expires ,
387394 token = token ['access_token' ],
@@ -437,7 +444,7 @@ def validate_refresh_token(self, refresh_token, client, request, *args, **kwargs
437444 """
438445 try :
439446 rt = RefreshToken .objects .get (token = refresh_token )
440- request .user = rt . user
447+ request .user = self . _extract_token_user ( rt )
441448 request .refresh_token = rt .token
442449 # Temporary store RefreshToken instance to be reused by get_original_scopes.
443450 request .refresh_token_instance = rt
0 commit comments