心はいつも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 1日め

ようやくMacBookAir を購入しました。Dellノートがずっと調子悪かった …

railsでtest unitを生成させない

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

no image
railsのエラーメッセージを日本語化

message:で渡すエラーメッセージや、その他いろんな箇所を日本語化します。 …

HerokuにRailsアプリをdeployする

Railsプロジェクトというよりも、Railsアプリっていうほうが正んでしょうか …

no image
editとupdate

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

パーフェクトRuby 2章Rubyの基礎 2-5-5 クラスメソッド

p54 2-5-5 クラスメソッド インスタンスメソッドに対して、クラスに対して …

iPad使用前/使用後、雑感。

5/28にiPadがAppleStoreからクロネコヤマトで届けられました。 週 …

初めてのRuby8章「オブジェクトとクラス」

2章「配列とハッシュ」の次はいきなり8章「オブジェクトとクラス」に行ってしまいま …

つながらないWimaxの電波倍返し

googleが見つかりませんと言われると、対外電波切れ。 本日は多発しています。 …

MacBookAirの容量が足りない

当ブログairpucciで人気なのがMacBookAirに関するエントリ。ありが …