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

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 用Devise after_sign_in_path_for重定向循环前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个noob问题.我想设法重定向用户访问的最后一页.所以我做了以下…
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

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

有任何想法吗?

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

解决了:

Matchu是对的request.referer还返回域名…

http://example.com/users/sign_in

(注:无www前缀)

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

解决方法

不要重定向到引荐来源 – 通常是一个坏主意.

而是在查询字符串或表单数据中传递下一个值.也许使用像:

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).然后编写登录操作并查看以保留:next query-string参数.

猜你在找的Ruby相关文章