使用自定义会话控制器设计after_sign_in_path

时间:2013-02-11 13:48:00

标签: ruby-on-rails ruby devise

如何在点击登录之前定义设计post_sign_in_path以重定向到页面用户?我在application_controller中试过这个:

 13   def after_sign_in_path_for(resource_or_scope)
 14     sign_in_url = url_for(:action => 'new', :controller => 'my_sessions', :only_path => false, :protocol => 'http')
 15     if request.referer == sign_in_url
 16       super
 17     else
 18       stored_location_for(resource_or_scope) || request.referer || root_path
 19     end
 20   end

有了这个,我只被重定向到root_path。值得一提的是,我有Sessions callse MySessionsController的自定义控制器。我做错了什么?

1 个答案:

答案 0 :(得分:2)

您不需要触摸after_sign_in_path_for(resource_or_scope),因为这是默认行为。

返回路径存储在session["user_return_to"]中(如果用户是您的设计范围),并由store_location! in FailureApp

设置

每次看守认证失败时都会调用此失败应用:请参阅warden config来电Delegator

你有可能以某种方式绕过其中一些吗?

如果你在没有爆炸的情况下进行监督认证,就会发生这种情况。如果您致电warden.authenticate!,warden仅通过失败应用程序保释,请参见warden wiki确实发生if you call devise's authenticate_user!

请确保您在会话控制器like here中使用after_sign_in_path_for作为重定向位置,以防您拥有自定义控件。