[PATCH conductor] BZ 858997 - Fix AJAX error handling

Jirka Tomasek jtomasek at redhat.com
Fri Sep 21 12:09:19 UTC 2012


On 09/21/2012 12:31 AM, Matt Wagner wrote:
> A recent patch for the login page broke our handling of 401s
> on AJAX responses. That has an easy fix, but broke the login
> page's error-handling.
>
> This fix modifies the login page to handle 401s. It's the most
> elegant fix I could find at this time -- ideally we should pull
> some part of this 401 handling up to converge-ui but that is
> out of scope for today.
>
> https://bugzilla.redhat.com/show_bug.cgi?id=858997
> ---
>   src/app/controllers/user_sessions_controller.rb |    2 +-
>   src/app/views/user_sessions/new.html.haml       |   15 ++++++++++++++-
>   2 files changed, 15 insertions(+), 2 deletions(-)
>
> diff --git a/src/app/controllers/user_sessions_controller.rb b/src/app/controllers/user_sessions_controller.rb
> index 8f3385d..ac0607f 100644
> --- a/src/app/controllers/user_sessions_controller.rb
> +++ b/src/app/controllers/user_sessions_controller.rb
> @@ -48,7 +48,7 @@ class UserSessionsController < ApplicationController
>         format.xml { head :unauthorized }
>         flash.now[:warning] = t "user_sessions.flash.warning.login_failed"
>         format.html { render :action => :new }
> -      format.js { render :layout => false }
> +      format.js { head :unauthorized }
>       end
>     end
>   
> diff --git a/src/app/views/user_sessions/new.html.haml b/src/app/views/user_sessions/new.html.haml
> index ec04542..b195b1b 100644
> --- a/src/app/views/user_sessions/new.html.haml
> +++ b/src/app/views/user_sessions/new.html.haml
> @@ -17,10 +17,23 @@
>     = "| #{@title}" unless @title.blank?
>   
>   = content_for :notifications do
> -  = render :partial => 'notifications' if flash[:warning].present?
> +  %div.error.hidden
> +    %p.text= t("user_sessions.flash.warning.login_failed")

error message is not displayed when JS is turned off.

>   
>   = content_for :login_logo do
>     = image_tag 'login-card-logo-upstream.png'
>   
>   = content_for :footer do
>     = render :partial => 'layouts/footer'
> +
> += content_for :extra do
> +  %script
> +    :plain
> +      $(document).bind("ajax:complete",
> +              function(evt, data, status, xhr){
> +                if(status == "error") {
> +                  $('.error').show();
> +                  $('form .spinner').fadeOut('fast');
> +                }
> +              }
> +      );

With this approach, the error message is not displayed when JS is turned 
off because it is not using flash functionality. I have tried to play 
with this, the best solution would probably be to
use

format.js { render :layout => false, :status => :unauthorized }

in controller. But the problem is that the js.erb is not executed then :/

Jirka



More information about the aeolus-devel mailing list