【问题标题】:Protecting Content with AuthLogic使用 AuthLogic 保护内容
【发布时间】:2011-03-10 08:05:26
【问题描述】:

我知道这听起来像是一个非常非常简单的用例,我希望确实如此,但我发誓我已经找遍了整个地方,但没有找到任何提及的方法 - 甚至不是最好的方式 - 这样做。

我对 Ruby、Rails 和周围的一切都是全新的(这可能解释了很多很多)。我用作学习工具的虚拟应用程序需要身份验证才能做几乎任何有意义的事情,所以我选择从解决这个问题开始。我已经安装了 AuthLogic gem,并让它在介绍文档和 Railscast 所涵盖的范围内运行良好,但现在我可以注册、登录和注销......我需要用它做点什么。

例如,我需要创建一个用户可以上传图片的页面。我打算有一个ImagesController 和一个upload 操作方法,但我希望只有登录用户才能访问它。我想在每个受限操作中,如果没有current_user,我可以添加代码来重定向,但这似乎真的很冗长。

有没有更好的方法可以让我定义或识别受限区域并在一个地方处理身份验证检查?

【问题讨论】:

    标签: ruby-on-rails authlogic


    【解决方案1】:

    确保你的 application_controller.rb 中有这些方法

    def current_user_session
      return @current_user_session if defined?(@current_user_session)
      @current_user_session = UserSession.find
    end
    
    def current_user
      return @current_user if defined?(@current_user)
      @current_user = current_user_session && current_user_session.record
    end
    
    def require_user
      unless current_user
        store_location
        flash[:notice] = "You must be logged in to access this page"
        redirect_to new_user_session_url
        return false
      end
    end
    

    然后在您的控制器中,您可以使用前置过滤器来限制对页面的访问

    class ExamplesController < ActionController::Base
      before_filter :require_user, :only => :private
    
      def public
        // some public stuff
      end
    
      def private
        // some protected stuff
      end
    end
    

    【讨论】:

    • 谢谢,吉姆。我不得不查看一些东西并通过您的其他方法进行工作,但它工作得很好。谢谢。
    • 我应该为“store_location”放什么?
    【解决方案2】:

    before_filter 是你的朋友。您定义一个 require_authentication 函数,如果没有有效会话,则返回 false,然后根据您的喜好在控制器和操作中将其设置为 before_filter。

    查看 Authlogic 示例应用程序,它在 application_controller.rb 中定义了一些过滤器,然后在需要时使用它(例如 here,您需要登录才能销毁您的帐户,而 不是 登录以创建一个新的。

    【讨论】:

      【解决方案3】:

      您需要在页面上使用 before_filter,这样只有登录的用户才能看到它。如果你想要一个关于如何使用 Authlogic 的运行示例(包括 before_filter 的东西),你可以查看Authlogic Exmaple from Github

      【讨论】:

        【解决方案4】:

        您可以在 Github 上找到完整的代码 Gist。它大约有 360 行代码。包括步骤。

        http://gist.github.com/96556.txt

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-08-27
          • 2012-03-02
          • 2011-02-20
          • 2010-09-24
          • 1970-01-01
          • 2011-02-26
          • 2018-02-02
          • 2016-02-22
          相关资源
          最近更新 更多