创建自己的身份验证系统的步骤,需要一些指导

时间:2010-10-27 02:06:40

标签: ruby-on-rails

我想学习如何创建自己的身份验证系统,如果这样做错误,请提供一些指导。

  1. 我将在/ lib文件夹/lib/auth.rb
  2. 中创建一个模块
  3. 我将在ApplicationController中使用此模块。
  4. 当用户输入他们的电子邮件+密码时,我会调用一个方法,在用户的表中为具有相同电子邮件的用户进行查找,然后我将比较密码。 (我稍后会加盐加密)。
  5. 如果用户输入了正确的凭据,我将在Sessions表中创建一行,然后将会话GUID写入cookie。
  6. 现在,只要我需要检查用户是否已登录,或者我是否需要用户对象,我将检查cookie是否存在,如果存在,我将在会话表中查找具有相同guid的行,如果它存在,我将返回会话行,然后加载User对象。
  7. 我意识到有很多建议可以提供,但简而言之,这听起来像是一个可行的解决方案吗?

    现在为了使这个可用,我必须在我的ApplicationController中制作一些帮助方法吗?

    如何从我的视图中访问current_user?

    P.S 我知道其他身份验证系统,我只想了解如何创建自己的身份验证系统。

3 个答案:

答案 0 :(得分:1)

您所遵循的基本逻辑是正确的。当然,您可以随时使用您需要的功能进行扩展。例如,你需要帮助方法来处理“logged_in?”之类的东西。和“current_user”。此外,您可能希望将会话到期或会话保留添加为“记住我”功能 为此,你不会比构建自己的身份更好地学习身份验证系统,然后弄清楚它有什么问题。

答案 1 :(得分:0)

你应该在github上查看authlogic gem。 http://github.com/binarylogic/authlogic 它还有关于如何设置用户的很好说明。

答案 2 :(得分:0)

在费萨尔说出我要说的话后,我只回答你问题的最后部分: “我如何从我的视图中访问current_user?”

尝试这样的事情:

class User < ...
  def self.current=(u)
    @current = u
  end
  def self.current
    @current
  end
end

在您的视图(或代码的任何部分)中,您可以调用User.current。您的控制器必须将经过验证的用户分配给User.current。您的过滤器可以对“if User.current.nil?”做出反应。等等。

如果您想要线程安全,可以使用线程变量而不是@current:

Thread.current[:current_user] = u