【问题标题】:rspec asserting encrypted password not plain textrspec断言加密密码不是纯文本
【发布时间】:2010-09-01 06:09:44
【问题描述】:

如何在 rspec 中编写测试以确保密码不会以纯文本形式存储在我的 Ruby on Rails 应用程序中?

我并不真正关心实现,因为我不确切知道什么插件或我将如何编写密码加密(有很多例子)。

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

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

我是否走在正确的轨道上?

我有这些空测试:


describe "password encryption" do
it "should have an encrypted password attribute"
it "should set the encrypted password"
it "should encrypt the password"
end

【问题讨论】:

    标签: ruby-on-rails tdd rspec


    【解决方案1】:

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

    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
    

    结构和措辞可以更好,但如果您只是存储并读出明文密码以进行身份​​验证,则会给出失败的规范。

    除非您自己实施(通常不建议这样做),否则我认为您不会从指定加密的工作原理中获得多少收获。

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

    【讨论】:

    • 太棒了!感谢您的帮助。
    猜你喜欢
    • 2016-07-30
    • 1970-01-01
    • 2013-06-02
    • 1970-01-01
    • 2010-10-31
    • 1970-01-01
    • 1970-01-01
    • 2022-10-12
    • 1970-01-01
    相关资源
    最近更新 更多