在验证之前获取目标路径

时间:2015-07-06 11:21:43

标签: ruby-on-rails authentication devise routing

我在rails应用程序中使用Devise进行用户身份验证,因此某些路由包含在authenticate标记中,以便只允许访问登录的用户。

authenticate :user do
    post '/user/orders/new', to: 'user/orders#new', as: :new_user_order
end

例如,当用户在未登录时尝试创建新订单时,会将其重定向到登录页面。

我想要的是在登录后将用户定向到新订单页面。 目前,我们正在使用request.referrer,在尝试创建新订单之前,会将用户重定向回他们所在的页面。在发送登录之前,我似乎无法找到一种获取目标路径的方法。

有人知道我该怎么做吗?

由于

3 个答案:

答案 0 :(得分:0)

您需要在控制器中提供用于用户身份验证的before过滤器,而不是在路由中提及它。只需将以下代码放在控制器中,如果用户未登录,它应该重定向到注册 -

 before_filter :authenticate_user

答案 1 :(得分:0)

您需要覆盖Devise的Labyrinth方法,您可以在应用程序控制器中执行此操作

after_sign_in_path_for(resource_or_scope)

希望有所帮助!

答案 2 :(得分:0)

你可以坚持最后一个网址 - 在会话[:书签]中并通过做这样的事情 -

prepend_before_filter :set_bookmark

def set_bookmark
  session[:bookmark] = request.url
end

在SessionsController中,您可以使用session [:bookmark]的值(如果存在)或after_sign_in_path_for