On Fri, Sep 21, 2012 at 02:09:19PM +0200, Jirka Tomasek wrote:
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"
What if we move this to format.html only, and ....
> 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?
... leave this in?
>+ %div.error.hidden
>+ %p.text= t("user_sessions.flash.warning.login_failed")
Then just leave this part in.
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();
(And use a name other than '.error' here so it matches only the JS
version.)
>+ $('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 :/
Oh, good catch. Does what I described inline above sound better?
-- Matt