ruby-on-rails – Rails 3 – 使用OmniAuth设计 – 登录后重定向到/ users / sign_in

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – Rails 3 – 使用OmniAuth设计 – 登录后重定向到/ users / sign_in前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我使用devize与omniauth签署用户与Facebook.我希望他们在登录登录页面重定向.

我用过了

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

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

  1. def deny_access
  2. store_location
  3. redirect_to new_user_session_path
  4. end
  5.  
  6. def anyone_signed_in?
  7. !current_user.nil?
  8. end
  9.  
  10. private
  11.  
  12. def store_location
  13. session[:return_to] = request.fullpath
  14. end
  15.  
  16. def clear_stored_location
  17. session[:return_to] = nil
  18. end

为了解决这个问题,被重定向到“服务/”,我有使用Facebook和其他平台的身份验证的逻辑,我已经使用

  1. skip_before_filter :store_location

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

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

这是我的sign_in的路线

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

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

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

但是,这只会将我重定向到根页面.

我非常感谢任何帮助,

解决方法

我在这里回答

Devise doesn’t redirect properly to stored location when using omniauth provider like facebook

在application_controller.rb中

  1. def after_sign_in_path_for(resource_or_scope)
  2. if request.env['omniauth.origin']
  3. request.env['omniauth.origin']
  4. end
  5. end

猜你在找的Ruby相关文章