认证前获取目标路径

Get target path before authentication

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

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

例如,当用户在未登录的情况下尝试创建新订单时,他们将被重定向到登录页面。

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

有人知道我该怎么做吗?

谢谢

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

 before_filter :authenticate_user

你需要覆盖 Devise 的 after_sign_in_path_for(resource_or_scope) 方法,你可以在应用程序控制器中完成

def after_sign_in_path_for(resource_or_scope)
  # new_order_path
end

希望对您有所帮助!

您可以保留最后一个 url - 在会话 [:bookmark] 中并通过执行类似的操作 -

prepend_before_filter :set_bookmark

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

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