docs: def form_valid(self, form):
          """
          (2.2) As a credential acceptor, /login requires two parameters:
  
          1. ``username``: the username provided by the client
          2. ``password``: the password provided by the client
  
          If authentication is successful, the single sign-on session is
          created. If a service is provided, a ``ServiceTicket`` is
          created and the client is redirected to the service URL with
          the ``ServiceTicket`` included. If no service is provided, the
          login page is redisplayed with a message indicating a
          successful login.
  
          If authentication fails, the login form is redisplayed with an
          error message describing the reason for failure.
  
          The credential acceptor accepts one optional parameter:
  
          1. ``warn``: causes the user to be prompted when successive
             authentication attempts occur within the single sign-on
             session.
          """
          login(self.request, form.user)
          logger.info("Single sign-on session started for %s" % form.user)
  
          if form.cleaned_data.get('warn'):
              self.request.session['warn'] = True
  
          service = self.request.GET.get('service')
          if service:
              st = ServiceTicket.objects.create_ticket(service=service, user=self.request.user, primary=True)
              return redirect(service, params={'ticket': st.ticket})
          return redirect('cas_login')