我想使用after_sign_in_path_for
和after_inactive_sign_up_path_for
方法将用户重定向到某个特定页面,我会将这两个方法和before_action :authenticate_user!
全部放在应用程序控制器中,但是,当before_action方法运行它将在所有操作上调用,这会将我的应用程序重定向到错误的路由。我应该使用before_action :authenticate_user!, except: [:after_sign_in_path_for, :after_inactive_sign_up_path_for]
来跳过这两种方法的身份验证吗?
class ApplicationController < ActionController::Base
# Prevent CSRF attacks by raising an exception.
# For APIs, you may want to use :null_session instead.
protect_from_forgery with: :exception
before_action :authenticate!
def after_sign_in_path_for(user)
if user && user.is_a?(Vendor)
return edit_vendor_registration_path
elsif user && user.is_a?(Customer)
return dashboard_path
end
end
def after_sign_out_path_for(user)
if user && user.is_a?(Vendor)
return root_path
elsif user && user.is_a?(Customer)
return root_path
end
end
def authenticate!
if @current_user == current_customer
:authenticate_customer!
elsif @current_user == current_vendor
:authenticate_vendor!
end
end
end
我遇到了这个错误Filter chain halted as :require_no_authentication rendered or redirected
,我相信程序以某种方式创建了一个无限循环,可以重定向到dashboard_path。
答案 0 :(得分:0)
我认为你混淆了一些事情。
before_action :authenticate_user!
用于您希望用户进行身份验证的每个控制器操作,以便他可以继续请求。
e.g。 after_sign_in_path_for
是一个设计控制器的方法,可以像这样重写:https://github.com/plataformatec/devise/wiki/How-To:-Redirect-to-a-specific-page-on-successful-sign-up-%28registration%29