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

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

  関連記事

iPadのiBooksで自炊とかしたPDFの電子書籍を読む

手順覚えないのでブログに書きます。 Bookscan使用して手持ちPDF電子書籍 …

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

7.2ユーザー登録フォーム、です。 ユーザー認証も登録も、モデルは作ってあるので …

コンビニで切れないiPhone充電ケーブル買った

iPhone充電に使うライトニングケーブルって高いのに切れ易く涙目。 こんな感じ …

ブログをアプリを使ってiPhoneから更新

この前の投稿と、前の前の投稿はiphoneから行いました。ノートPCだとブログ投 …

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

6.2.5一意性を検証する、です。メールアドレスをIDとして使うため(でなくとも …

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

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

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

GWで電子本も文庫本も読み終え、「新しい本に入れ替えないと~」と思いながらすっか …

no image
Everyday Rails3章 バリデーションをテストする

さっき、Aaronを削除したらテスト失敗することを確認しましたが、名前入力無しの …

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

7.1.2ユーザーリソース、です。 /user/newを/signupで表示させ …

SublimeText2をMacにインストールしてターミナルから起動できるようにする。

Windowsには秀丸っていう超優秀なテクストエディタがあって、無料でも使えるの …