From 9557c85b292854559a90d279a728f1c0e95b499c Mon Sep 17 00:00:00 2001 From: Rahmania Astrid Mochtar Date: Thu, 21 Nov 2019 23:02:02 +0700 Subject: [PATCH 1/6] Custom passwordless auth backend + custom user model --- accounts/models.py | 4 ++++ accounts/tests/test_models.py | 10 ++++++++-- functional_tests/test_login.py | 10 +++++----- lists/templates/base.html | 32 +++++++++++++++++++------------- 4 files changed, 36 insertions(+), 20 deletions(-) diff --git a/accounts/models.py b/accounts/models.py index 4a5e618..9a2a34c 100644 --- a/accounts/models.py +++ b/accounts/models.py @@ -2,8 +2,12 @@ from django.db import models from django.contrib.auth.models import ( AbstractBaseUser, BaseUserManager, PermissionsMixin ) +from django.contrib import auth import uuid +auth.signals.user_logged_in.disconnect(auth.models.update_last_login) + + class Token(models.Model): email = models.EmailField() diff --git a/accounts/tests/test_models.py b/accounts/tests/test_models.py index 79a3a3a..e4dc10e 100644 --- a/accounts/tests/test_models.py +++ b/accounts/tests/test_models.py @@ -1,8 +1,8 @@ from accounts.models import Token from django.test import TestCase -from django.contrib.auth import get_user_model +from django.contrib import auth -User = get_user_model() +User = auth.get_user_model() class UserModelTest(TestCase): @@ -11,6 +11,12 @@ class UserModelTest(TestCase): user = User(email='a@b.com') user.full_clean() # should not raise + def test_no_problem_with_auth_login(self): + user = User.objects.create(email='edith@example.com') + user.backend = '' + request = self.client.request().wsgi_request + auth.login(request, user) + class TokenModelTest(TestCase): def test_links_user_with_auto_generated_uid(self): diff --git a/functional_tests/test_login.py b/functional_tests/test_login.py index 1d86b19..1aa1676 100644 --- a/functional_tests/test_login.py +++ b/functional_tests/test_login.py @@ -41,8 +41,8 @@ class LoginTest(FunctionalTest): self.browser.get(url) # she is logged in! - # self.wait_for( - # lambda: self.browser.find_element_by_link_text('Log out') - # ) - # navbar = self.browser.find_element_by_css_selector('.navbar') - # self.assertIn(TEST_EMAIL, navbar.text) \ No newline at end of file + self.wait_for( + lambda: self.browser.find_element_by_link_text('Log out') + ) + navbar = self.browser.find_element_by_css_selector('.navbar') + self.assertIn(TEST_EMAIL, navbar.text) \ No newline at end of file diff --git a/lists/templates/base.html b/lists/templates/base.html index d3cc533..ab24b67 100644 --- a/lists/templates/base.html +++ b/lists/templates/base.html @@ -16,19 +16,25 @@
- + {% if messages %} ​
-- GitLab From 6434bdf4a64d7457ffc0905331e20ebb1a7ce10e Mon Sep 17 00:00:00 2001 From: Rahmania Astrid Mochtar Date: Thu, 21 Nov 2019 23:09:51 +0700 Subject: [PATCH 2/6] completed chapter 19 --- accounts/urls.py | 4 +++- functional_tests/test_login.py | 12 +++++++++++- lists/templates/base.html | 2 +- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/accounts/urls.py b/accounts/urls.py index 52fbebb..7049e49 100644 --- a/accounts/urls.py +++ b/accounts/urls.py @@ -1,8 +1,10 @@ from django.conf.urls import url +from django.contrib.auth.views import logout + from accounts import views urlpatterns = [ url(r'^send_login_email$', views.send_login_email, name='send_login_email'), url(r'^login$', views.login, name='login'), - url(r'^logout$', views.logout, name='logout'), + url(r'^logout$', logout, {'next_page': '/'}, name='logout'), ] \ No newline at end of file diff --git a/functional_tests/test_login.py b/functional_tests/test_login.py index 1aa1676..06a19dd 100644 --- a/functional_tests/test_login.py +++ b/functional_tests/test_login.py @@ -45,4 +45,14 @@ class LoginTest(FunctionalTest): lambda: self.browser.find_element_by_link_text('Log out') ) navbar = self.browser.find_element_by_css_selector('.navbar') - self.assertIn(TEST_EMAIL, navbar.text) \ No newline at end of file + self.assertIn(TEST_EMAIL, navbar.text) + + # Now she logs out + self.browser.find_element_by_link_text('Log out').click() + + # She is logged out + self.wait_for( + lambda: self.browser.find_element_by_name('email') + ) + navbar = self.browser.find_element_by_css_selector('.navbar') + self.assertNotIn(TEST_EMAIL, navbar.text) \ No newline at end of file diff --git a/lists/templates/base.html b/lists/templates/base.html index ab24b67..d3bed5f 100644 --- a/lists/templates/base.html +++ b/lists/templates/base.html @@ -22,7 +22,7 @@ {% if user.email %} {% else %}