Przeglądaj źródła

HUE-9250 [useradmin] Prevent login failed due to user.last_login is None type

Ying Chen 5 lat temu
rodzic
commit
560a233721

+ 1 - 1
desktop/core/src/desktop/auth/forms.py

@@ -84,7 +84,7 @@ class AuthenticationForm(DjangoAuthenticationForm):
         user = User.objects.get(username=self.cleaned_data.get('username'))
 
         expires_delta = datetime.timedelta(seconds=conf.AUTH.EXPIRES_AFTER.get())
-        if user.is_active and user.last_login + expires_delta < datetime.datetime.now():
+        if user.is_active and user.last_login and user.last_login + expires_delta < datetime.datetime.now():
           INACTIVE_EXPIRATION_DELTA = datetime.timedelta(days=365)
           if is_admin(user):
             if conf.AUTH.EXPIRE_SUPERUSERS.get():

+ 11 - 0
desktop/core/src/desktop/auth/views_test.py

@@ -734,6 +734,17 @@ class TestLogin(PseudoHdfsTestBase):
     response = c.get('/hue')
     assert_true(b'<div id="login-modal" class="modal fade hide">' in response.content, response.content)
 
+  def test_login_without_last_login(self):
+    self.reset.append( conf.AUTH.BACKEND.set_for_testing(["desktop.auth.backend.AllowFirstUserDjangoBackend"]) )
+    self.reset.append( conf.AUTH.EXPIRES_AFTER.set_for_testing(10) )
+
+    client = make_logged_in_client(username=self.test_username, password="test")
+    client.get('/accounts/logout')
+    user = User.objects.get(username=self.test_username)
+    user.last_login = None
+    user.save()
+    response = client.post('/hue/accounts/login/', dict(username=self.test_username, password="test"), follow=True)
+    assert_equal(200, response.status_code, "Expected ok status.")
 
 class TestLoginNoHadoop(object):