【问题标题】:RESTful Authentication: Stumped trying to do simple redirect on cookie based authenticationRESTful 身份验证:尝试对基于 cookie 的身份验证进行简单重定向时遇到困难
【发布时间】:2010-10-28 14:05:26
【问题描述】:

我有一个使用 RESTful 身份验证插件的 RoR 应用程序。一切都很好。我最近启用了基于 cookie 的身份验证,并且效果也很好。问题是我想在使用 cookie 对用户进行身份验证时更改默认登录页面。我希望将经过 cookie 身份验证的用户重定向到从登录表单成功登录后重定向到的同一页面。它们始终被定向到原始请求 URL。我正在为此绞尽脑汁,因为我以为我了解它是如何工作的,而且我所做的每一个改变似乎都没有影响。

我怀疑这很简单,但我显然错过了它。如果您提供任何反馈、指导或建议,我们将不胜感激。

【问题讨论】:

    标签: ruby-on-rails cookies routing restful-authentication


    【解决方案1】:

    我解决了这个问题,但在我看来它有点难看。这就是我所做的。

    在 cookie 身份验证方法中,我设置了一个会话变量,指示使用了 cookie 登录方法。

    def login_from_cookie
      user = cookies[:auth_token] && User.find_by_remember_token(cookies[:auth_token])
      if user && user.remember_token?
        session[:cookie_login] = true   **# this is my addition**
        self.current_user = user
        handle_remember_cookie! false # freshen cookie token (keeping date)
        self.current_user
      end
    end
    

    然后在 :before_filter set_current_user 中,我只检查该变量并重定向是否已设置,确保将变量设置为 nil。

    def set_current_user
      Authorization.current_user = current_user
      if session[:cookie_login] 
        redirect_to :controller => :users, :action => :search
        session[:cookie_login] = false
      end
    end
    

    它并不漂亮,但它确实有效。我绝对愿意接受有关如何清理它的任何建议。

    【讨论】:

    • 不会对每个请求都进行重定向吗?
    • 一个有趣的想法,但我支持 Steven 的问题 - 一旦用户登录,他们肯定会通过 cookie 持续登录(在每个请求上)对吗?那么这是否意味着他们不断被重定向?你说它有效,这意味着我一定错过了什么——我误解了什么?
    【解决方案2】:

    您可以在成功登录后将此行添加到会话控制器:

    redirect_to :controller => 'dashboard', :action => 'index'
    

    【讨论】:

      【解决方案3】:

      我正在使用 Bort,所以这可能不是 Restful_Authentication 本身的一部分,但会话控制器中有一个 successful_login 方法使用此 restful_auth 方法:

      redirect_back_or_default( root_path )
      

      authenticated_system.rb中定义

          def redirect_back_or_default(default)
            redirect_to(session[:return_to] || default)
            session[:return_to] = nil
          end
      

      【讨论】:

        【解决方案4】:

        你不能只设置你的路线,以便

        map.root :controller => :users, :action => :search
        

        然后有一个 before_filter 来检查以确保设置了一些“登录”参数?只需在用户登录时设置此参数,无论是通过 cookie 还是通过正常方式。然后,无论是 cookie 认证发生还是正常认证发生,都会转到默认页面。也许我误解了这个问题。

        【讨论】:

        • 我认为如果他们通过其他方法登录,发布者不想重定向 - 只有当他们通过 cookie 登录时。如果我错了,请纠正我。
        【解决方案5】:

        Restful Authentication 存储发出请求时尝试访问的原始 URL。您所要做的就是阻止它存储该值或在执行 cookie 身份验证时清除该值,然后用户将被重定向回您的默认页面。

        我可能会在 authenticated_system.rb 中这样做

         def login_from_cookie
          user = cookies[:auth_token] && User.find_by_remember_token(cookies[:auth_token])
          if user && user.remember_token?
            self.current_user = user
            session[:return_to] = nil # This clears out the return value so the user will get redirected to the default path
            handle_remember_cookie! false # freshen cookie token (keeping date)
            self.current_user
          end
        end
        

        is session[:return_to] = nil

        然后确保您在会话控制器中设置了默认路径,并且您应该已经设置好了。会话控制器中的代码应该是这样的:

        redirect_back_or_default(the_path_you_want_to_send_them_to)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-10-08
          • 2011-01-28
          • 1970-01-01
          • 1970-01-01
          • 2015-08-12
          • 2017-09-18
          • 2021-11-27
          相关资源
          最近更新 更多