オレマトペ

Webエンジニアを目指し学習中のデブアラサーによるほぼ擬音ブログ

Ruby on Rails チュートリアル第8章を終えて

f:id:Npakk:20200610222322p:plain

はじめに

このエントリーでは、Railsを勉強している私がRuby on Rails チュートリアルを学習した感想などを、
各章毎に述べていきたいと思います。
このチュートリアルを学ぶ方法は動画、電子書籍など色々な媒体で提供されておりますが、
ここではWebテキスト(第6版)を使用しております。

目次

第8章 基本的なログイン機構

この章では簡単なログイン・ログアウト機能を実装していきます。

HTTPはステートレス(状態がない)なため、リクエストが終わると前の状態を全て忘れてしまう。
これではログイン状態を次ページでも維持できないため、セッションと呼ばれる半永続的な接続をWebブラウザと、 Rialsサーバー間で確立させ、状態を維持させます。
セッションの確立には、Sessionメソッド・cookiesメソッドと色々あるみたいですが、
まずはSessionメソッドを使用します。

GenerateコマンドでSessionsコントローラを作成し、ルーティングファイルを編集して、 ログインビューを作成していきます。

ログイン画面に入力されたユーザー名、メールアドレスはparamsハッシュから簡単に取り出せる。
具体的にはparamsハッシュの中に、sessionsハッシュが格納されており、
さらにその下にemailとpasswordの入力値が格納されています。

これらの値を元にDBからfind_byでユーザ情報を取り出し、パスワードをauthenticationメソッドを用いて認証します。

また、ログイン失敗時にflashメソッドでエラーメッセージを表示するのですが、
リダイレクトをせずに単純に再レンダリングしているので、
アクション実行後のみならずHome画面にもどってエラーメッセージが表示されてしまいます。
そこで、flash.newメソッドをつかってアクション実行後のみエラーメッセージを表示するように変更します。
リダイレクトをその後に用いるかどうかで、flash or flash.newのどちらを使うか使い分けるらしいです。

Sessionsコントローラを生成して時点で、Sessionsヘルパーモジュールも自動的に作成されているので、
全てのコントローラの親クラスで、Sessionsヘルパーモジュールを読み込みます。
そして、このモジュールにsessionメソッドを使用して、ユーザーのブラウザ内の一時cookiesに暗号化済みのユーザーIDを作成します。

この一時cookiesを攻撃者は盗み出せるみたいですが、それを使って本物のユーザーとしてログインすることはできないみたいです。(言い切ってますね) ただし、この後に出てくるcookiesメソッドで確立される永続的セッションでは、常に盗み取られる可能性がつきまとうそう。

またログイン済みかどうかでヘッダーの表示を切り替えるため、ヘルパーメソッドを作成し、
それを用いてerbファイルに条件分岐でレイアウトを変更するようにしました。
すこしerbファイル自体が複雑になるので、すっきり見やすくする方法があればいいなと思いました。

また統合テストではルーティングやデータベースの更新、レイアウトの変更などが正しく行われるかまで確認しました。

あとがき

ちょっとずつ見慣れたアプリっぽくなってきました。
機能を足していってる感じがおもしろい。
次回は発展的なログイン機構ということで応用っぽいですね。がんばりましょう。