如何在Devise登录后返回上一页

And*_*vey 4 ruby-on-rails devise

通过Devise成功登录后,如何将用户重定向回他们所在的页面?

我已经阅读和搜索了很多,我明白我需要定义after_sign_in_path_for.我已经完成了这个并且它正常工作,我遇到的问题是理解上一页的存储方式,以及如何正确调用它.

我在会话控制器中有这个:

def after_sign_in_path_for(resource)
    return request.env['omniauth.origin'] || session[:user_return_to] || root_path
end
Run Code Online (Sandbox Code Playgroud)

我也试过了

...
return request.env['omniauth.origin'] || stored_location_for(resource) || root_path
...
Run Code Online (Sandbox Code Playgroud)

我不认为我理解如何存储位置,因为如果用户单击登录,则会将用户重定向回根路径.

登录可以通过两种方式启动.(a)用户尝试访问受限制的视图(即before_filter :authenticate_user!...,在这种情况下,他们被重定向并提示登录.或者(b)用户单击登录链接,如果用户未登录则在每个页面上可用.

(a)似乎有效.(b)不是.我想我需要在用户点击登录链接时将当前位置存储到会话.

我该怎么做呢?或者,哪里有一个很好的信息来源,可以帮助我理解这一点.

谢谢!

Aay*_*mar 9

您可以使用request.referrer此SO问题中的解释来获取之前的URL :如何重定向到Ruby On Rails中的上一页?