代码之家  ›  专栏  ›  技术社区  ›  Rimian

rspec断言加密密码不是纯文本

  •  2
  • Rimian  · 技术社区  · 16 年前

    如何在rspec中编写一个测试,以确保密码不会以纯文本的形式存储在RubyonRails应用程序中?

    我还不太关心这个实现,因为我不知道究竟是什么插件,也不知道如何编写密码加密(有很多例子)。

    我只想要一个独立于实现的失败测试。然后,当我实现我的代码时,我可以确信我没有纯文本密码。

    我想我需要保存用户(带密码),然后再次获取用户并检查密码是否不等于纯文本版本。

    我走对了吗?

    我有这些空测试:

    <> <代码> BR/> 描述“密码加密”do
    它“应该具有加密的密码属性”
    它“应该设置加密密码”
    它“应该加密密码”
    结束 < /代码>

    我只想要一个独立于实现的失败测试。然后,当我实现代码时,我可以确信我没有纯文本密码。

    我想我需要保存用户(带密码),然后再次获取用户,并检查密码是否与纯文本版本不符。

    我走对了吗?

    我有这些空测试:


    描述“密码加密”做
    它“应该有加密的密码属性”
    它“应该设置加密密码”
    它“应该加密密码”
    结束

    1 回复  |  直到 16 年前
        1
  •  4
  •   nruth    16 年前

    正如您所说,您描述的行为是密码以其简单的形式是不可恢复的,所以请尝试编写一个描述该行为的规范,而不是加密,这更是一个实现细节。

    specify "a user's password should not be readable when they are loaded from the database" do
      my_password = 'foobar22'
      u = User.create :password => my_password, :password_confirmation => my_password
      u.reload
      u.password.should_not == my_password
    end
    

    它的结构和语言可能更好,但如果您只是存储和读取用于身份验证的明文密码,则会给出一个失败的规范。

    我认为,除非您自己实现加密(这通常是不可取的),否则您不会从指定加密如何工作中得到太多的好处。

    如果您选择使用现成的系统(例如,设计、清除、_),您可能会发现编写集成测试来检查您将系统正确连接到项目中的方式更有用,而不是测试身份验证系统的细节(作者应该已经这样做了,否则会找到不同的身份验证)系统!).

    推荐文章