心はいつもAirPucci (空元気でもいいから)

毎日がPucciを着ているような気分

RailsTutorial4.0を高速で復習する。6.3.3章。

   


6.3.3ユーザー認証、です。

新規ユーザー登録のときは入力で、:passwordと:password_confirmatinをもらって、2つを比較して、一致していたら暗号化して:password_digestに保存する、です。

ユーザー認証の要求確認

ユーザーの認証の時は、入力で:passwordをもらって、DBから:password_digestひっぱってきて暗号といて比較して、一致していたら認証とする、です。

この作業は2つに分けるのが自然です。最初に、ユーザーをメールアドレスで検索します。次に、受け取ったパスワードでユーザーを認証します。

そうですね。

実装自体はほぼhas_secure_passwordでできるそうです。

has_secure_passwordはRailsのメソッドです。

ユーザーがID(email)とパスワードを入力する
IDからパスワードをひっぱってきて、入力パスワードと一致するかチェック
パスワードの長さは6文字以上(<=まだやっていなかったか! ですね。

テストを書く

リスト6.28 パスワードの長さとauthenticateメソッドをテストする。
spec/models/user_spec.rb

略
  #name属性のデータがある
  it { should respond_to(:name) }
  #email属性のデータがある
  it { should respond_to(:email) }
  #password_digest属性のデータがDBにある
  it { should respond_to(:password_digest) }
  #password属性のデータがユーザー入力にある
  it { should respond_to(:password) }
  #password_ confirmation属性のデータがユーザー入力にある
  it { should respond_to(:password_confirmation) }
  #@userがvalidである
  it { should be_valid }
  #@userがauthenticateに応答する
  it { should respond_to(:authenticate) }
略
  describe "passwordが5文字以下のとき" do
    before { @user.password = @user.password_confirmation = "a" * 5 }
    #validではないと検証する
    it { should be_invalid }
  end

  describe "authenticateメソッドの戻り値について" do
    before { @user.save }
    let(:found_user) { User.find_by(email: @user.email) }

    describe "適正なpasswordのとき" do
      #password一致する
      it { should eq found_user.authenticate(@user.password) }
    end

    describe "不正なpasswordのとき" do
      let(:user_for_invalid_password) { found_user.authenticate("invalid") }
      #password不一致
      it { should_not eq user_for_invalid_password }
      specify { expect(user_for_invalid_password).to be_false }
    end
  end
end

いきなりauthenticateがでてきて、どこから来たんや!って思うけど、has_secure_passwordにあるんですね。

次はパスワード6文字以上=5文字以下はダメ。これはpasswordカラム切る前に決めて書いておくべきだった。

has_secure_passwordが書いてなければエラーが山ほど出ます。

6.3.4ユーザーがセキュアなパスワードを持っている、です。

実装する

これだけのチェックがhas_secure_passwordで済んでしまうところがいまいち踏み込み感がなくて消化不良気味です。と思っていたら、gitのコード読めとMichaelHeartlから突っ込みが入りました

リスト6.29 セキュアパスワードの完全な実装。
app/models/user.rb

class User < ActiveRecord::Base 略 has_secure_password validates :password, length: { minimum: 6 } end テストはパスしました。 コミットしておきます。 次は、 6.3.5ユーザーを作成する です。

 - テクニカル ,

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

  関連記事

no image
電源が入らない!MacBookAirが真っ黒になりました。

iPhoneを買ったばかりの頃、iPhoneのメーラーを立ち上げても中身が表示さ …

RailsTutorial4.0を高速で復習する。8.2.1章。

8.2.1[このアカウント設定を保存する]、です。 RailsTutorial4 …

no image
iPhoneのKindleアプリでChip Conley氏の本を読んでみました。その2

iPadの発売がようやく発表されました。私個人としては読書端末としての利用を期待 …

no image
RailsTutorial4.0を高速で復習する。6.3章。

6.3セキュアなパスワードを追加する、です。 パスワードはセキュアであるべきと思 …

no image
future vision 2019 vs 2010

マイクロソフトのfuture visonが話題らしい。 2019年の近未来。 情 …

no image
ブログは独自ドメインの方が強いかもね

すっかり月一ペースで更新するブログになってしまい焦ります。 震災直後に政権批判し …

no image
before_actionが定義してある。

ruby on rails3プリケーションプログラミングの本の内容をruby2. …

no image
Gitをインストールする

Rails開発がしたいのですが、今後必要になるでしょうからGitをインストールし …

no image
RailsTutorial4.0を高速で復習する。5.6章。演習1問目。

5.6演習です。 一問目。 リスト5.28の静的ページのテストコードは簡潔ですが …

no image
iTunesをMacBookAirからWindowsに戻しました。

2月にMacBookAirを購入し、今までWindows上にあったiTunesを …