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:
Disco DeDisco
2026-01-30 21:51:06 -05:00
parent ae63861adb
commit 9c102ac0f5
2 changed files with 14 additions and 7 deletions

View File

@@ -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")

View File

@@ -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("/")