Rails 3 Devise Ajax login Перехват сообщения об ошибке

Я нахожусь под:
Рельсы 3.0.9
Разработка 1.4.7
jquery-ujs

Что я сделал?...
1) Я настроил форму входа с data-remote="true".
2) Я настроил обработчики jquery для входа:

('form#user-reg-form')
    .bind("ajax:beforeSend", function(evt, xhr, settings){
    })
    .bind("ajax:success", function(evt, data, status, xhr){
      $('#comments').append(xhr.responseText);

    })
    .bind('ajax:complete', function(evt, xhr, status){
    })
    .bind("ajax:error", function(evt, xhr, status, error){
      try {
        errors = $.parseJSON(xhr.responseText);
      } catch(err) {
        errors = {message: "Please reload the page and try again"};
      }
      errorText = "There were errors with the submission: \n<ul>";

      for ( error in errors ) {
        errorText += "<li>" + error + ': ' + errors[error] + "</li> ";
      }

      errorText += "</ul>";

      // Insert error list into form
      $form.find('div.validation-error').html(errorText);
    });

3) Я переопределил контроллер сеанса следующим образом:

  def create
    resource = warden.authenticate!(:scope => resource_name, :recall => "#{controller_path}#failure")
    sign_in(resource_name, resource)
    return render :json => { :success => true, :content => current_user.email }
  end

  def failure
    return render:json => {:success => false, :errors => ["Login failed."]}
  end

4) Я установил свой файл route.rb:

devise_for :users, :controllers => {:sessions => "sessions"}

Все работает... но когда я передаю неверный адрес электронной почты или пароль, у меня появляется неперехваченное сообщение от модели пользователя (возможно, от Devise) «неверный адрес электронной почты или пароль». Но я хочу поймать это сообщение и поместить его в объект json примерно так return render:json => {:success => false, :errors => ////неверный адрес электронной почты или пароль////}

Проблема в следующем: :recall не работает. Похоже, что Warden.authenticate! не видит мой метод сбоя

5
задан Cœur 9 December 2018 в 04:10
поделиться