Просмотр исходного кода

Fixes #23665: Handle a login POST without a username field

Arthur 17 часов назад
Родитель
Сommit
1ffe1c489d
2 измененных файлов с 13 добавлено и 1 удалено
  1. 1 1
      netbox/account/views.py
  2. 12 0
      netbox/netbox/tests/test_authentication.py

+ 1 - 1
netbox/account/views.py

@@ -139,7 +139,7 @@ class LoginView(View):
 
 
             return response
             return response
 
 
-        username = form['username'].value()
+        username = form['username'].value() or ''
         logger.debug(f"Login form validation failed for username: {remove_linebreaks(username)}")
         logger.debug(f"Login form validation failed for username: {remove_linebreaks(username)}")
 
 
         return render(request, self.template_name, {
         return render(request, self.template_name, {

+ 12 - 0
netbox/netbox/tests/test_authentication.py

@@ -1074,6 +1074,18 @@ class SSOLoginButtonTestCase(DjangoTestCase):
             self.assertEqual(auth_backend['params'].get('next'), '/dcim/sites/')
             self.assertEqual(auth_backend['params'].get('next'), '/dcim/sites/')
 
 
 
 
+class LoginViewTestCase(DjangoTestCase):
+
+    def test_login_missing_username(self):
+        """
+        A login form submission which omits the username field must be rejected as invalid (see #23665).
+        """
+        response = self.client.post(reverse('login'), {'password': 'wrongpassword'})
+
+        self.assertEqual(response.status_code, 200)
+        self.assertTrue(response.context['form'].errors.get('username'))
+
+
 class SocialAuthBeginViewTestCase(DjangoTestCase):
 class SocialAuthBeginViewTestCase(DjangoTestCase):
     """
     """
     Verify the view which initiates an SSO login. Chromium-based browsers evaluate the CSP
     Verify the view which initiates an SSO login. Chromium-based browsers evaluate the CSP