我要的是,如果有人进入签约或重定向到不同的网页默认的其他假设签署时错误信息mycontroller#index
在我的应用我已经overiddingDevise::SessionsController
和Devise::RegistrationsController
。我遵循此链接中的步骤设计重定向登录后失败,但仍然我被重定向到注册页面和登录页面。我正在使用Rails 3.2和Devise 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
路线
devise_for :users, :skip => [:registrations, :sessions]
devise_scope :user do
get 'signup' => 'devise/registrations#new', :as => :new_user_registration
post 'signup' => 'devise/registrations#create', :as => :user_registration
get 'users/cancel' => 'devise/registrations#cancel', :as => :cancel_user_registration
get 'users/edit' => 'devise/registrations#edit', :as => :edit_user_registration
put 'users' => 'devise/registrations#update'
delete 'users/cancel' => 'devise/registrations#destroy' ,:as=>:destroy_user_session
get 'signin' => 'devise/sessions#new', :as => :new_user_session
post 'signin' => 'devise/sessions#create', :as => :user_session
get 'signout' => 'devise/sessions#destroy', :as => :destroy_user_session
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
lib / custom_failure.rb
class CustomFailure < Devise::FailureApp
def redirect_url
redirect_to {:controller=>"mycontroller",:action=>"index"}
end
def respond
if http_auth?
http_auth
else
redirect
end
end
end
application.rb
config.autoload_paths += %W(#{config.root}/lib)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句