心はいつも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
RailsTutorial4.0を高速で復習する。11.2章。

11.2フォローしているユーザー用のWebインターフェイス、です。 モデルができ …

WordPress子テーマの作り方

デザイン変更したairpucci、TwentyTwelveというWordPres …

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

巷にRails4本がなく、Rails3本をRails4でやってみようとしたところ …

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

3.2章は最初のテストです。 Railsチュートリアルは、アプリケーションの振る …

no image
destory

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

no image
Ruby on Railsのインストール

Rubyのアップデートが終わったので、いよいよRailsをインストールします。 …

no image
「Follow me」バッジのつけ方。

ブログの横についている「Follow me」バッジ。いろんな方がつけているのを見 …

詳解 Objective-C 2.0 第3版 CHAPTER4 オブジェクトの型と動的結合

CHAPTER4は「オブジェクトの型と動的結合」なんだけど、 動的結合ってなに? …

no image
@で始まるのが インスタンス変数

@ で始まるのが インスタンス変数 大文字で始まるのが 定数 文法書のどこに書い …

no image
RailsTutorial4.0を高速で復習する。5.4.2章の途中から。

リスト5.35 ボタンをユーザー登録ページにリンクする、です。 リンクを貼る系は …