ruby-on-rails - 使用 Devise after_sign_in_path_for 重定向循环

标签 ruby-on-rails ruby-on-rails-3 devise

我遇到了一些菜鸟问题。我想要设计重定向到用户访问的最后一个页面。所以我做了以下...

def after_sign_in_path_for(resource)
    request.referer
end

效果很好...除非用户实际上通过原始表单登录,这会导致重定向循环。

我试过了

def after_sign_in_path_for(resource)
   if (request.referer == "/users/sign_in")
  :pages_home
 else
  request.referer
 end

end

但这不起作用,很可能是因为我不知道 request.referer 在遇到原始用户登录页面 (www.example.com/users/sign_in) 时实际返回什么。

有什么想法吗?

tldr;使用 devise,我想重定向到从(即/blog/4)登录的页面,除非该页面是/users/sign_in

已解决:

马丘是对的。 request.referer 也返回了域名...

http://example.com/users/sign_in

(注意:没有 www 前缀)

我仍然对 request.referer 的替代方案感兴趣,如果它是一种不安全或低效的方式。

最佳答案

不要重定向到引荐来源网址 - 这通常是一个坏主意。

相反,在查询字符串或表单数据中传递一个next值。也许使用类似的东西:

def after_sign_in_path_for(resource)
  params[:next] || super
end

当用户尝试访问需要身份验证的页面(例如,/admin/posts/3/edit)时,身份验证 before_filter 会发出 redirect_to new_session_url( :next => request.path)。然后编写登录操作和 View 以保留 :next 查询字符串参数。

关于ruby-on-rails - 使用 Devise after_sign_in_path_for 重定向循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4330588/

相关文章:

ruby-on-rails - 重定向回来不再起作用

ruby-on-rails - 用 Rails 设计 4 : user show route doesn't exist

ruby-on-rails - 加载错误 : cannot load such file — bcrypt_ext

ruby-on-rails - 获取从周五开始的周列表

mysql - 在 rails 中为 MySQL 定义 varchar 的长度

ruby-on-rails - Heroku 托管的 RoR 站点与 CloudFlare ssl 不工作

ruby-on-rails - Ruby 替换整个文件而不是附加到它

ruby-on-rails - 在语义/循环/形式中访问对象

ruby-on-rails - 使用 omniauth 进行 Facebook 身份验证

ruby-on-rails - 如何按特定优先级对事件记录查询进行排序