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ユーザーを作成する です。
関連記事
-
-
MacBookAir 1日め
ようやくMacBookAir を購入しました。Dellノートがずっと調子悪かった …
-
-
railsでtest unitを生成させない
ruby on rails3プリケーションプログラミングの本の内容をruby2. …
-
-
railsのエラーメッセージを日本語化
message:で渡すエラーメッセージや、その他いろんな箇所を日本語化します。 …
-
-
HerokuにRailsアプリをdeployする
Railsプロジェクトというよりも、Railsアプリっていうほうが正んでしょうか …
-
-
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に関するエントリ。ありが …