使用AuthLogic保护内容

时间:2009-08-05 13:04:28

标签: ruby-on-rails authlogic

我知道这听起来像一个非常非常简单的用例,我希望它是,但我发誓我已经到处寻找并且没有找到任何提及 - 甚至不是最好的这样做的方式。

我是Ruby,Rails以及周围所有内容的新品牌(可能解释 lot )。我正在使用的虚拟应用程序作为我的学习工具需要进行身份验证才能完成几乎任何有意义的操作,因此我选择从解决该问题开始。我已经安装了AuthLogic gem并且它在介绍文档和Railscast所涵盖的范围内工作得很好,但现在我可以注册,登录和注销......我需要用它做点什么。

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

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

4 个答案:

答案 0 :(得分:6)

确保在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

答案 1 :(得分:0)

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

查看Authlogic示例应用程序,该应用程序在application_controller.rb中定义了一些过滤器,然后在需要时使用它(例如here,您需要在其中记录以销毁您的帐户,以及已记录以创建新的。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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