『Ruby on Rails チュートリアル』「第6章ユーザーのモデルを作成する」3

railstutorial.jp

序文

Railsチュートリアル14日目。

今週は本当にずっとぼーっとしてたんですが大分回復してきました。

進捗

  • 第6章 ユーザーのモデルを作成する
    • 6.3 セキュアなパスワードを追加する
    • 6.4 最後に
  • 第7章 ユーザー登録
    • 7.1 ユーザーを表示する

コード実装部分(一部)

/sample_app/test/models/user_test.rb

require 'test_helper'

class UserTest < ActiveSupport::TestCase
  # 実際のテストの前に実行されるメソッド
  def setup
    @user = User.new(name: "Example User", email: "user@example.com",
                     password: "foobar", password_confirmation: "foobar")
  end

(中略)

  # emailの形式は正しくなっているか
  test "email validation should accept valid addresses" do
    valid_addresses = %w[user@example.com USER@foo.COM A_US-ER@foo.bar.org
                         first.last@foo.jp alice+bob@baz.cn]
    valid_addresses.each do |valid_address|
      @user.email = valid_address
      assert @user.valid?, "#{valid_address.inspect} should be valid"
    end
  end
  
  # 不正な形式のメールアドレスをはじくか
  test "email validation should reject invalid addresses" do
    invalid_addresses = %w[user@example,com user_at_foo.org user.name@example.
                           foo@bar_baz.com foo@bar+baz.com foo@bar..com]
    invalid_addresses.each do |invalid_address|
      @user.email = invalid_address
      assert_not @user.valid?, "#{invalid_address.inspect} should be invalid"
    end
  end
  
  # 重複するメールアドレスをはじくか
  test "email addresses should be unique" do
    duplicate_user = @user.dup
    # 大文字にしてもはじくか
    duplicate_user.email = @user.email.upcase
    @user.save
    assert_not duplicate_user.valid?
  end
  
  # /sample_app/app/models/user.rbのbefore_saveコールバックは動いているか
  test "email addresses should be saved as lower-case" do
    mixed_case_email = "Foo@ExAMPle.CoM"
    @user.email = mixed_case_email
    @user.save
    assert_equal mixed_case_email.downcase, @user.reload.email
  end
  
  # パスワードに空白が含まれていないか
  test "password should be present (nonblank)" do
    # 不正なパスワードを設定して、assert_notになるか
    @user.password = @user.password_confirmation = " " * 6
    assert_not @user.valid?
  end

  # パスワードは6文字以上でなければならない  
  test "password should have a minimum length" do
    # 不正なパスワードを設定して、assert_notになるか
    @user.password = @user.password_confirmation = "a" * 5
    assert_not @user.valid?
  end
end

GitHub

github.com

実行結果

f:id:yjkym:20181130154320p:plain

感想

Railsチュートリアル6章3日目。

Railsに実装されているhas_secure_passwordメソッドを使用して、セキュアなUserモデルを作成していく。
"パスワードをハッシュ化する"という意味がようやく明確に理解できた気がする。
平文のパスワードがDBに保存されず、管理人にすらパスワードが見えないならキーロガーでも仕込まれない限り漏洩しようがない(気がする)。

それはそれとして個人レベルのウェブアプリでさえなんでもかんでもログインさせようとするのはこのチュートリアルが原因かもしれないという気もした。

体調が大分回復したことがはっきりと自覚できている。
やはり昨日は相当頭が回っていなかったように思う。
今年中にできればチュートリアルを終わらせたいところだがさて。

カロリーメイトください。

BGM

GOOD MUSIC / KICK THE CAN CREW

www.youtube.com