Rails 3 – 使用OmniAuth设计 – 登录后重定向转到/ users / sign_in

我使用omiseuth设计用于登录Facebook用户。 我希望在登录之前登录到他们所在的页面后重定向它们。

我用过了

def after_sign_in_path_for(resource_or_scope) store_location = session[:return_to] clear_stored_location (store_location.nil?) ? "/" : store_location.to_s end 

在我的应用程序控制器中,并使用此代码创建了sessions_helper

  def deny_access store_location redirect_to new_user_session_path end def anyone_signed_in? !current_user.nil? end private def store_location session[:return_to] = request.fullpath end def clear_stored_location session[:return_to] = nil end 

并解决问题,重定向到“服务/”,我有Facebook和其他平台认证的逻辑,我已经使用了

 skip_before_filter :store_location 

在服务和其他控制器,我不会存储为位置。

Q1我现在遇到的问题是当我使用ajax并在模态窗口中呈现登录表单时,当用户成功登录时,它会被重定向到/ users / sign_in /。 我没有用户控制器,并试图创建一个sessions_controller.rb并添加skip_before …但它不起作用。

这是我的sign_in路线

 new_user_session GET /users/sign_in(.:format) {:action=>"new", :controller=>"devise/sessions"} user_session POST /users/sign_in(.:format) {:action=>"create", :controller=>"devise/sessions"} destroy_user_session GET /users/sign_out(.:format) {:action=>"destroy", :controller=>"devise/sessions"} 

Q2当用户退出时,我尝试使用重定向

  def after_sign_out_path_for(resource_or_scope) (session[:return_to].nil?) ? "/" : session[:return_to].to_s end 

但这只会将我重定向到根页面。

我非常感谢任何帮助,

我在这里回答

使用像facebook这样的omniauth提供程序时,Devise不会正确地重定向到存储位置

在application_controller.rb中

  def after_sign_in_path_for(resource_or_scope) if request.env['omniauth.origin'] request.env['omniauth.origin'] end end 

你认为Devise提供了帮助者sign_in_and_redirect(resource_or_scope, *args) (详情可以在这里找到)? 您还可以获得sign_out_and_redirect(resource_or_scope)等。

Q2。 尝试检查session[:return_to] – 它很可能是nil

您可以传递一个参数,例如: /auth/facebook?referrer=/path/to/redirect

在Facebook身份validation之后,您可以在env["omniauth.params"]使用此参数。