4

我知道这听起来像是一个非常非常简单的用例,我希望是这样,但我发誓我已经到处找遍了,没有发现任何方法——甚至不是最好的方法——这样做。

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

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

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

4

4 回答 4

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

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

class ExamplesController < ActionController::Base
  before_filter :require_user, :only => :private

  def public
    // some public stuff
  end

  def private
    // some protected stuff
  end
end
于 2009-08-05T13:18:43.350 回答
0

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

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

于 2009-08-05T13:19:57.047 回答
0

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

于 2009-08-05T17:04:29.123 回答
0

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

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

于 2010-03-27T02:31:51.753 回答