1
1
from django .contrib .auth import get_user_model
2
2
from django .core import signing
3
+ from django .core .signing import SignatureExpired
3
4
from django .utils import baseconv
4
5
5
6
__all__ = (
@@ -52,13 +53,14 @@ def _make_hash_value(self, user):
52
53
user_pk = baseconv .base62 .encode (user .pk )
53
54
return self .sep .join ((user_pk , last_login ))
54
55
55
- def unsign (self , value , max_age = None ):
56
+ def unsign (self , value , max_age = None , allow_multi_use = False ):
56
57
"""
57
58
Verify access token and return user, if the token is valid.
58
59
59
60
Args:
60
61
value (str): URL safe base64 encoded access token.
61
62
max_age (datetime.timedelta): Maximum age an access token to be valid.
63
+ allow_multi_use: If True allows the token to be used more than once
62
64
63
65
Returns:
64
66
django.contrib.user.models.BaseUser: Return user object for given
@@ -85,7 +87,10 @@ def unsign(self, value, max_age=None):
85
87
raise UserDoesNotExist ("User with pk=%s does not exist" % user_pk ) from e
86
88
else :
87
89
if last_login != '' and self .to_timestamp (user .last_login ) != last_login :
88
- raise signing .SignatureExpired (
89
- "The access token for %r seems used" % user
90
- )
90
+ if allow_multi_use :
91
+ return user
92
+ else :
93
+ raise SignatureExpired (
94
+ "The access token for %r seems used" % user
95
+ )
91
96
return user
0 commit comments