Ruby on rails 注册和身份验证失败时如何重定向设计?

Ruby on rails 注册和身份验证失败时如何重定向设计?,ruby-on-rails,ruby,ruby-on-rails-3,devise,Ruby On Rails,Ruby,Ruby On Rails 3,Devise,我想要的是,如果有人在注册或登录时输入了错误的信息,将被重定向到默认页面以外的其他页面,比如说mycontroller\index 在我的应用程序中,我已经跳过了designe::sessioncontroller和designe::RegistrationsController 但我仍然被重定向到注册页面和登录页面。我正在使用Rails 3.2和Desive 3.4.1 这是我的代码…我做错了什么或遗漏了什么?提前谢谢 会话控制器 class SessionsController < D

我想要的是,如果有人在注册或登录时输入了错误的信息,将被重定向到默认页面以外的其他页面,比如说
mycontroller\index
在我的应用程序中,我已经跳过了
designe::sessioncontroller
designe::RegistrationsController
但我仍然被重定向到注册页面和登录页面。我正在使用Rails 3.2和Desive 3.4.1 这是我的代码…我做错了什么或遗漏了什么?提前谢谢

会话控制器

class SessionsController < Devise::SessionsController

  def create
    resource = warden.authenticate!(:scope => resource_name, :recall => "#   {controller_path}#failure")
    sign_in_and_redirect(resource_name, resource)
  end

  def sign_in_and_redirect(resource_or_scope, resource=nil)
    scope = Devise::Mapping.find_scope!(resource_or_scope)
    resource ||= resource_or_scope
    sign_in(scope, resource) unless warden.user(scope) == resource
    return render :json => {:success => true}
  end

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

  def create
    build_resource

    if resource.save
      if resource.active_for_authentication?
        set_flash_message :notice, :signed_up if is_navigational_format?
        sign_up(resource_name, resource)
        return render :json => {:success => true}
      else
        set_flash_message :notice, :"signed_up_but_#{resource.inactive_message}" if  is_navigational_format?
        expire_session_data_after_sign_in!
        return render :json => {:success => true}
      end
    else
      clean_up_passwords resource
      return render :json => {:success => false}


      redirect_to {:controller=>"deal",:action=>"confirm_and_pay"}
    end

  end

  def sign_up(resource_name, resource)
    sign_in(resource_name, resource)
  end

end
class ApplicationController < ActionController::Base

  protect_from_forgery

  def after_sign_up_path_for(resource)
    show_deals_path(resource)
  end

  def after_sign_in_path_for(resource)
    sign_in_url = url_for(:action => 'new', :controller => 'sessions', :only_path => false, :protocol => 'http')
    if request.referer == sign_in_url
      super
    else
      stored_location_for(resource) || request.referer || root_path
    end
  end
end
应用程序控制器

class SessionsController < Devise::SessionsController

  def create
    resource = warden.authenticate!(:scope => resource_name, :recall => "#   {controller_path}#failure")
    sign_in_and_redirect(resource_name, resource)
  end

  def sign_in_and_redirect(resource_or_scope, resource=nil)
    scope = Devise::Mapping.find_scope!(resource_or_scope)
    resource ||= resource_or_scope
    sign_in(scope, resource) unless warden.user(scope) == resource
    return render :json => {:success => true}
  end

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

  def create
    build_resource

    if resource.save
      if resource.active_for_authentication?
        set_flash_message :notice, :signed_up if is_navigational_format?
        sign_up(resource_name, resource)
        return render :json => {:success => true}
      else
        set_flash_message :notice, :"signed_up_but_#{resource.inactive_message}" if  is_navigational_format?
        expire_session_data_after_sign_in!
        return render :json => {:success => true}
      end
    else
      clean_up_passwords resource
      return render :json => {:success => false}


      redirect_to {:controller=>"deal",:action=>"confirm_and_pay"}
    end

  end

  def sign_up(resource_name, resource)
    sign_in(resource_name, resource)
  end

end
class ApplicationController < ActionController::Base

  protect_from_forgery

  def after_sign_up_path_for(resource)
    show_deals_path(resource)
  end

  def after_sign_in_path_for(resource)
    sign_in_url = url_for(:action => 'new', :controller => 'sessions', :only_path => false, :protocol => 'http')
    if request.referer == sign_in_url
      super
    else
      stored_location_for(resource) || request.referer || root_path
    end
  end
end
如果您想查看这个链接,您应该将其添加到config/initializers/designe.rb中

config.warden do |manager|
  manager.failure_app = CustomFailure
end

第一件事是确认是否调用了控制器
'design/registrations#new'
调用designe::sessioncontroller中的'new'方法,而不是您的sessioncontroller。尝试将其替换为
“注册#新”
。它应该呼叫您的控制器。您是对的,我没有呼叫我的注册控制器…让我进一步调查一下如何在失败后将会话#create重定向到mycontroller#index…您可以将其放在answer上,我将接受它。