ぞえの技術めも

Ruby on Rails勉強中

【59日目】【1日20分のRailsチュートリアル】【第7章】ユーザー登録失敗

Ruby on Railsチュートリアル(第3版)

今日は「7.3 ユーザー登録失敗」から。

7.3 ユーザー登録失敗

無効なデータ送信を受け付けるユーザー登録フォームを作成し、ユーザー登録フォームを更新してエラーの一覧を表示します。

ユーザー名が空白になってないか、メールアドレスが不正なメールアドレス(正規表現に引っかかる)でないか、などかな。

7.3.1 正しいフォーム

/usersへのPOSTリクエストはcreateアクションに送られます。 createアクションでフォーム送信を受け取り、User.newを使用して新しいユーザーオブジェクトを作成し、ユーザーを保存 (または保存に失敗) し、再度の送信用のユーザー登録ページを表示するという方法で機能を実装しようと思います。

RailsはRESTfulなのでPOSTリクエストはcreateアクションに送られるのか。
この辺り実装しつつRESTfulを学べるのがいいよね。

Usersコントローラにcreateアクションを追加。

app/controllers/users_controller.rb

  def create
    @user = User.new(params[:user])    # 実装は終わっていないことに注意!
    if @user.save
      # Handle a successful save.
    else
      render 'new'
    end
  end

リスト7.16のコードの動作を理解するもっともよい方法は、実際に無効なユーザー登録データを送信 (submit)してみることです。

ふむ、じゃあ実際に無効なユーザー登録を実施してみよう。

サーバーを起動して

$ rails server -b $IP -p $PORT

<ローカルアドレス>/signupでユーザー登録ページにアクセス。

f:id:kt_zoe:20161025123436p:plain

Name:Foo Bar
Email:foo@invalid
Password:foo
Confirmation:bar

を入力して「Create my account」をクリック。

f:id:kt_zoe:20161025123445p:plain

エラー画面が表示されました。

さっきフォームに入力した値が表示されているのが分かります。(パスワード以外)

エラーになっている理由は

Rails 4.0以降では、上のコードはエラーになります (上の図7.15および図7.16を参照)。これにより、デフォルトでのセキュリティが高められました。

が関係してるんでしょう。
今のUser.new(params[:user])の書き方だとセキュリティ的に良くないのでエラーになるってことかな…?

params[:user]を悪意のあるユーザーによって書き換えられることがあるからなのかな。よく分からないけどそう思っておこう。

今日の作業時間は【31分】

次は「7.3.2 Strong parameters」から。