【59日目】【1日20分のRailsチュートリアル】【第7章】ユーザー登録失敗
今日は「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
でユーザー登録ページにアクセス。
Name:Foo Bar
Email:foo@invalid
Password:foo
Confirmation:bar
を入力して「Create my account」をクリック。
エラー画面が表示されました。
さっきフォームに入力した値が表示されているのが分かります。(パスワード以外)
エラーになっている理由は
Rails 4.0以降では、上のコードはエラーになります (上の図7.15および図7.16を参照)。これにより、デフォルトでのセキュリティが高められました。
が関係してるんでしょう。
今のUser.new(params[:user])
の書き方だとセキュリティ的に良くないのでエラーになるってことかな…?
params[:user]
を悪意のあるユーザーによって書き換えられることがあるからなのかな。よく分からないけどそう思っておこう。
今日の作業時間は【31分】。
次は「7.3.2 Strong parameters」から。