Rails:Warden/Devise - 如何在登录/访问失败之前捕获URL

Ala*_*ann 17 ruby-on-rails devise ruby-on-rails-3

我试图弄清楚如何使用Warden/Devise将用户重定向到他们登录的页面(或登录失败).我认为某个会话变量可用或可用.

例如,场景1:未授权用户进入受保护的页面X; 重定向到登录页面; 用户登录; 用户重定向到受保护的页面x

场景2:未授权用户希望在第x页上采取受保护的操作; 用户点击登录链接; 用户登录; 用户重定向到页面x,其中操作现在可用

任何指针都表示赞赏.

谢谢!

小智 13

有一个名为after_sign_in_path_for(resource)(http://rdoc.info/github/plataformatec/devise/master/Devise/Controllers/Helpers)的设计辅助方法,以及一个名为session[:"user.return_to"]存储最后一个网址的会话变量.该after_sign_in_path_for方法需要返回一个字符串,然后设计自动使用此路径在登录后重定向用户.

在我的应用程序控制器中,如果未设置会话变量,我已将以下内容重定向到主页:

def after_sign_in_path_for(resource)
    (session[:"user.return_to"].nil?) ? "/" : session[:"user.return_to"].to_s
end
Run Code Online (Sandbox Code Playgroud)

  • 我不得不使用这个SO答案中提到的`session [:user_return_to]`:http://stackoverflow.com/a/5959018/337903 (9认同)
  • 这个答案的更简洁版本(使用 `user_return_to` 而不是 `user.return_to`):将是 `session[:user_return_to] || 根路径` (2认同)

小智 1

您可以使用request.referer来获取上一个URL.