Skip to content

Commit fed914c

Browse files
MattBlack85auvipy
authored andcommitted
Add hook for creating custom refresh tokens (#695)
1 parent 510ebd0 commit fed914c

File tree

2 files changed

+27
-7
lines changed

2 files changed

+27
-7
lines changed

oauth2_provider/oauth2_validators.py

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -520,13 +520,7 @@ def save_bearer_token(self, token, request, *args, **kwargs):
520520
source_refresh_token=refresh_token_instance,
521521
)
522522

523-
refresh_token = RefreshToken(
524-
user=request.user,
525-
token=refresh_token_code,
526-
application=request.client,
527-
access_token=access_token
528-
)
529-
refresh_token.save()
523+
self._create_refresh_token(request, refresh_token_code, access_token)
530524
else:
531525
# make sure that the token data we're returning matches
532526
# the existing token
@@ -553,6 +547,15 @@ def _create_access_token(self, expires, request, token, source_refresh_token=Non
553547
access_token.save()
554548
return access_token
555549

550+
def _create_refresh_token(self, request, refresh_token_code, access_token):
551+
refresh_token = RefreshToken(
552+
user=request.user,
553+
token=refresh_token_code,
554+
application=request.client,
555+
access_token=access_token
556+
)
557+
refresh_token.save()
558+
556559
def revoke_token(self, token, token_type_hint, request, *args, **kwargs):
557560
"""
558561
Revoke an access or refresh token.

tests/test_oauth2_validators.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,6 +270,23 @@ def test_save_bearer_token__with_no_refresh_token__creates_new_access_token_only
270270
self.assertEqual(0, RefreshToken.objects.count())
271271
self.assertEqual(1, AccessToken.objects.count())
272272

273+
def test_save_bearer_token__with_new_token__calls_methods_to_create_access_and_refresh_tokens(self):
274+
token = {
275+
"scope": "foo bar",
276+
"refresh_token": "abc",
277+
"access_token": "123",
278+
}
279+
# Mock private methods to create access and refresh tokens
280+
create_access_token_mock = mock.MagicMock()
281+
create_refresh_token_mock = mock.MagicMock()
282+
self.validator._create_refresh_token = create_refresh_token_mock
283+
self.validator._create_access_token = create_access_token_mock
284+
285+
self.validator.save_bearer_token(token, self.request)
286+
287+
create_access_token_mock.assert_called_once()
288+
create_refresh_token_mock.asert_called_once()
289+
273290

274291
class TestOAuth2ValidatorProvidesErrorData(TransactionTestCase):
275292
"""These test cases check that the recommended error codes are returned

0 commit comments

Comments
 (0)