【问题标题】:How to use session[:user.return_to] from DEVISE如何使用 DEVISE 中的 session[:user.return_to]
【发布时间】:2011-03-03 20:33:56
【问题描述】:

我正在尝试使用session[:user.return_to],但没有成功...

我的代码:

def after_sign_in_path_for(resource)
  (session[:"user.return_to"].nil?) ? "/" : session[:"user.return_to"].to_s
end

所以,问题是:当我检查我的会话变量时,我没有这些名称。

我想在被重定向到登录页面之前访问我正在处理的页面。

【问题讨论】:

标签: ruby-on-rails-3 session login devise


【解决方案1】:

遇到同样的问题。到目前为止,我有一个马马虎虎的解决方案..

在我的 application_controller.rb 中

  before_filter :set_page # at the top and then

  protected
  def set_page
    unless request.referer.include?('/users/sign')
      session[:return_to] = request.referer
    end
  end

除非语句是为了防止用户返回到登录或退出页面。我不喜欢这里的 url 是硬编码的,所以我希望看到一个更好的解决方案。此外,似乎 before_filter 永远不会在重定向到登录页面的页面上发生,因此如果您单击需要登录的内容,登录后您将被带回单击链接的页面,而不是实际链接自己。

【讨论】:

    【解决方案2】:

    有几种方法可以解决这个问题。

    使用新版本的 Devise(我使用的是 2.1.2),将 before_filter :authenticate_user! 添加到您的控制器将自动为您设置此行为。

    如果您仍想手动设置,一种方法是在session 中设置路径。 Devise 期望在session["#{resource}_return_to"] 中找到它,其中'resource' 是您的用户模型的名称。所以通常是session["user_return_to"]。你有一个时期'。在您的版本中,这可能导致您的错误。此外,session 接受键的字符串值,因此无需尝试对其进行符号化。

    另一种方法是按照您的做法覆盖after_sign_in_path_for(resource) 方法。有关如何执行此操作的更多详细信息,请访问设计 wiki How To: Redirect back to current page after sign in

    最后,由于这会发出重定向,您可能需要考虑使用完整的 URL。

    def after_sign_in_path_for(resource)
      session["#{resource}_return_to"] || root_url
    end
    

    【讨论】:

      【解决方案3】:

      在您的 ApplicationController.rb 中

       def after_sign_in_path_for(resource)
         sign_in_url = url_for(:action => 'new', :controller => 'sessions', :only_path => false, :protocol => 'http')
         if request.referer == sign_in_url
           super
         else
           stored_location_for(resource) || request.referer || root_path
         end
       end
      

      stored_location_for(resource) 是 Devise 的内置方法,用于存储用户来自的位置。

      【讨论】:

        【解决方案4】:

        您需要在重定向某人之前定义会话变量。

        session[:url_back] = "/***
        

        【讨论】:

          【解决方案5】:
          猜你喜欢
          • 2018-06-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-07-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多