From 3498f237a0fc694d6707ce7ba3207d2dcd287645 Mon Sep 17 00:00:00 2001
From: Erwan Rouchet <rouchet@teklia.com>
Date: Mon, 2 Jul 2018 13:42:08 +0000
Subject: [PATCH] Create token on user creation

---
 arkindex/users/__init__.py |  1 +
 arkindex/users/apps.py     |  5 ++++-
 arkindex/users/signals.py  | 10 ++++++++++
 arkindex/users/tests.py    |  7 +++++++
 4 files changed, 22 insertions(+), 1 deletion(-)
 create mode 100644 arkindex/users/signals.py

diff --git a/arkindex/users/__init__.py b/arkindex/users/__init__.py
index e69de29bb2..1cfa95c54f 100644
--- a/arkindex/users/__init__.py
+++ b/arkindex/users/__init__.py
@@ -0,0 +1 @@
+default_app_config = 'arkindex.users.apps.UsersConfig'
diff --git a/arkindex/users/apps.py b/arkindex/users/apps.py
index 4ce1fabc03..04be7d4322 100644
--- a/arkindex/users/apps.py
+++ b/arkindex/users/apps.py
@@ -2,4 +2,7 @@ from django.apps import AppConfig
 
 
 class UsersConfig(AppConfig):
-    name = 'users'
+    name = 'arkindex.users'
+
+    def ready(self):
+        from arkindex.users import signals  # noqa
diff --git a/arkindex/users/signals.py b/arkindex/users/signals.py
new file mode 100644
index 0000000000..b484a7c979
--- /dev/null
+++ b/arkindex/users/signals.py
@@ -0,0 +1,10 @@
+from django.conf import settings
+from django.db.models.signals import post_save
+from django.dispatch import receiver
+from rest_framework.authtoken.models import Token
+
+
+@receiver(post_save, sender=settings.AUTH_USER_MODEL)
+def create_auth_token(sender, instance=None, created=False, **kwargs):
+    if created:
+        Token.objects.create(user=instance)
diff --git a/arkindex/users/tests.py b/arkindex/users/tests.py
index 71f77aebdf..7853150a75 100644
--- a/arkindex/users/tests.py
+++ b/arkindex/users/tests.py
@@ -3,6 +3,7 @@ from django.urls import reverse
 from django.core import mail
 from django.contrib import auth
 from arkindex.users.models import User
+from rest_framework.authtoken.models import Token
 
 
 class TestUsers(TestCase):
@@ -41,3 +42,9 @@ class TestUsers(TestCase):
         self.assertListEqual(response.redirect_chain, [(reverse('password_reset_done'), 302)])
         self.assertEqual(len(mail.outbox), 1)
         self.assertEqual(mail.outbox[0].to, ['email@address.com'])
+
+    def test_auto_token(self):
+        """
+        Check creating a user automatically creates a token
+        """
+        self.assertEqual(Token.objects.filter(user=self.user).count(), 1)
-- 
GitLab