فهرست منبع

fix(api): when fetching a user token, return the first one

Peter Thomassen 6 سال پیش
والد
کامیت
46570e66e5
3فایلهای تغییر یافته به همراه8 افزوده شده و 5 حذف شده
  1. 5 2
      api/desecapi/models.py
  2. 1 1
      api/desecapi/tests/testregistration.py
  3. 2 2
      api/desecapi/views.py

+ 5 - 2
api/desecapi/models.py

@@ -95,8 +95,11 @@ class User(AbstractBaseUser):
     def get_short_name(self):
     def get_short_name(self):
         return self.email
         return self.email
 
 
-    def get_token(self):
-        token, created = Token.objects.get_or_create(user=self)
+    def get_or_create_first_token(self):
+        try:
+            token = Token.objects.filter(user=self).earliest('created')
+        except Token.DoesNotExist:
+            token = Token.objects.create(user=self)
         return token.key
         return token.key
 
 
     def __str__(self):
     def __str__(self):

+ 1 - 1
api/desecapi/tests/testregistration.py

@@ -199,4 +199,4 @@ class RegistrationTest(APITestCase):
         self.assertEqual(len(mail.outbox), outboxlen + 1)
         self.assertEqual(len(mail.outbox), outboxlen + 1)
 
 
         user = models.User.objects.get(email=data['email'])
         user = models.User.objects.get(email=data['email'])
-        self.assertTrue(user.get_token() in mail.outbox[-1].body)
+        self.assertTrue(user.get_or_create_first_token() in mail.outbox[-1].body)

+ 2 - 2
api/desecapi/views.py

@@ -520,7 +520,7 @@ class UserCreateView(views.UserCreateView):
         if user.locked:
         if user.locked:
             send_account_lock_email(self.request, user)
             send_account_lock_email(self.request, user)
         if not user.dyn:
         if not user.dyn:
-            context = {'token': user.get_token()}
+            context = {'token': user.get_or_create_first_token()}
             send_token_email(context, user)
             send_token_email(context, user)
         signals.user_registered.send(sender=self.__class__, user=user, request=self.request)
         signals.user_registered.send(sender=self.__class__, user=user, request=self.request)
 
 
@@ -537,7 +537,7 @@ def unlock(request, email):
                 if user.locked:
                 if user.locked:
                     user.unlock()
                     user.unlock()
                     if not user.dyn:
                     if not user.dyn:
-                        context = {'token': user.get_token()}
+                        context = {'token': user.get_or_create_first_token()}
                         send_token_email(context, user)
                         send_token_email(context, user)
             except User.DoesNotExist:
             except User.DoesNotExist:
                 # fail silently, so people can't probe registered addresses
                 # fail silently, so people can't probe registered addresses