updated apps.lyric.views for simpler login authentication and error messaging; .tests.test_views have new test method to assert either authentication condition has properly occurred
This commit is contained in:
@@ -70,3 +70,14 @@ class LoginViewTest(TestCase):
|
|||||||
user = auth.get_user(self.client)
|
user = auth.get_user(self.client)
|
||||||
self.assertEqual(user.is_authenticated, True)
|
self.assertEqual(user.is_authenticated, True)
|
||||||
self.assertEqual(user.email, "discoman@example.com")
|
self.assertEqual(user.email, "discoman@example.com")
|
||||||
|
|
||||||
|
def test_shows_login_error_if_token_invalid(self):
|
||||||
|
response = self.client.get("/apps/lyric/login?token=invalid-token", follow=True)
|
||||||
|
user = auth.get_user(self.client)
|
||||||
|
self.assertEqual(user.is_authenticated, False)
|
||||||
|
message = list(response.context["messages"])[0]
|
||||||
|
self.assertEqual(
|
||||||
|
message.message,
|
||||||
|
"Invalid login link!—please request a new one",
|
||||||
|
)
|
||||||
|
self.assertEqual(message.tags, "error")
|
||||||
|
|||||||
@@ -1,10 +1,8 @@
|
|||||||
from django.contrib import auth, messages
|
from django.contrib import auth, messages
|
||||||
from django.core.exceptions import ValidationError
|
|
||||||
from django.core.mail import send_mail
|
from django.core.mail import send_mail
|
||||||
from django.shortcuts import redirect
|
from django.shortcuts import redirect
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from .models import Token, User
|
from .models import Token
|
||||||
from ..dashboard.forms import ItemForm
|
|
||||||
|
|
||||||
def send_login_email(request):
|
def send_login_email(request):
|
||||||
email = request.POST["email"]
|
email = request.POST["email"]
|
||||||
@@ -27,12 +25,10 @@ def send_login_email(request):
|
|||||||
|
|
||||||
def login(request):
|
def login(request):
|
||||||
uid = request.GET.get("token")
|
uid = request.GET.get("token")
|
||||||
if not uid:
|
|
||||||
return redirect("/")
|
|
||||||
|
|
||||||
user = auth.authenticate(request, uid=uid)
|
user = auth.authenticate(request, uid=uid)
|
||||||
if user is not None:
|
if user is not None:
|
||||||
user.backend = "apps.lyric.authentication.PasswordlessAuthenticationBackend"
|
user.backend = "apps.lyric.authentication.PasswordlessAuthenticationBackend"
|
||||||
auth.login(request, user)
|
auth.login(request, user)
|
||||||
|
else:
|
||||||
|
messages.error(request, "Invalid login link!—please request a new one")
|
||||||
return redirect("/")
|
return redirect("/")
|
||||||
|
|||||||
Reference in New Issue
Block a user