@@ -205,6 +205,13 @@ def save_bearer_token(self, token, request, *args, **kwargs):
205205 """
206206 Save access and refresh token, If refresh token is issued, remove old refresh tokens as in rfc:`6`
207207 """
208+ if request .refresh_token :
209+ # remove used refresh token
210+ try :
211+ RefreshToken .objects .get (token = request .refresh_token ).delete ()
212+ except RefreshToken .DoesNotExist :
213+ assert () # TODO though being here would be very strange, at least log the error
214+
208215 expires = timezone .now () + timedelta (seconds = oauth2_settings .ACCESS_TOKEN_EXPIRE_SECONDS )
209216 if request .grant_type == 'client_credentials' :
210217 request .user = request .client .user
@@ -218,9 +225,6 @@ def save_bearer_token(self, token, request, *args, **kwargs):
218225 access_token .save ()
219226
220227 if 'refresh_token' in token :
221- # discard old refresh tokens
222- RefreshToken .objects .filter (user = request .user ).filter (application = request .client ).delete ()
223-
224228 refresh_token = RefreshToken (
225229 user = request .user ,
226230 token = token ['refresh_token' ],
@@ -255,6 +259,7 @@ def validate_refresh_token(self, refresh_token, client, request, *args, **kwargs
255259 try :
256260 rt = RefreshToken .objects .get (token = refresh_token )
257261 request .user = rt .user
262+ request .refresh_token = rt
258263 return rt .application == client
259264
260265 except RefreshToken .DoesNotExist :
0 commit comments