Index: django/contrib/auth/views.py
===================================================================
--- django/contrib/auth/views.py	(revision 11743)
+++ django/contrib/auth/views.py	(working copy)
@@ -18,9 +18,12 @@
 @csrf_protect
 @never_cache
 def login(request, template_name='registration/login.html',
+          redirect_if_logged_in=None,
           redirect_field_name=REDIRECT_FIELD_NAME,
           authentication_form=AuthenticationForm):
     "Displays the login form and handles the login action."
+    if request.user.is_authenticated() and redirect_if_logged_in != None:
+      return HttpResponseRedirect(redirect_if_logged_in)
     redirect_to = request.REQUEST.get(redirect_field_name, '')
     if request.method == "POST":
         form = authentication_form(data=request.POST)
Index: django/contrib/auth/tests/views.py
===================================================================
--- django/contrib/auth/tests/views.py	(revision 11743)
+++ django/contrib/auth/tests/views.py	(working copy)
@@ -184,7 +184,17 @@
         self.login(password='password1')
 
 class LoginTest(AuthViewsTestCase):
-
+    def login(self, password='password'):
+        response = self.client.post('/login/', {
+            'username': 'testclient',
+            'password': password
+            }
+        )
+        self.assertEquals(response.status_code, 302)
+        self.assert_(response['Location'].endswith(settings.LOGIN_REDIRECT_URL))
+        self.assert_(SESSION_KEY in self.client.session)
+  
+  
     def test_current_site_in_context_after_login(self):
         response = self.client.get(reverse('django.contrib.auth.views.login'))
         self.assertEquals(response.status_code, 200)
@@ -193,7 +203,25 @@
         self.assertEquals(response.context['site_name'], site.name)
         self.assert_(isinstance(response.context['form'], AuthenticationForm), 
                      'Login form is not an AuthenticationForm')
-        
+    
+    def test_logged_in_user_should_be_redirected(self):
+      "If the user is logged in, we should redirect to the specified page"
+      self.login()
+      response = self.client.get(reverse('django.contrib.auth.views.login', {'redirect_if_logged_in': '/next_page/'}))
+      self.assertEquals(302, response.status_code)
+      self.assertEquals('/next_page/', response['Location'])
+      
+    def test_logged_in_user_should_not_be_redirected(self):
+      "If the user is logged in but we don't have any redirect url, we display the login form"
+      self.login()
+      response = self.client.get(reverse('django.contrib.auth.views.login'))
+      self.assertEquals(200, response.status_code)
+    
+    def test_guest_should_not_be_redirected(self):
+      "If the user is not logged, we display the login form"
+      response = self.client.get(reverse('django.contrib.auth.views.login', {'redirect_if_logged_in': '/next_page/'}))
+      self.assertEquals(200, response.status_code)
+      
 class LogoutTest(AuthViewsTestCase):
     urls = 'django.contrib.auth.tests.urls'
 
