データベースの接続
- 解説
- 1. DB接続情報の設定
- 2. ログインしてみよう
解説
1. DB接続情報の設定
Laravelの認証機能は、接続先DBの「users」テーブルに登録されている「email」カラムと「password」カラムの値と一致するかどうかで、ログイン判定をおこないます。
『準備 > データベースの作成』で作成した、「tweet_laravel」DBの「users」テーブルに登録されているデータでログインできるように、DBへの接続情報を設定しましょう。
DBの接続情報は、「.env」ファイルに設定します。
手順1
(1) | 「.env」ファイルのDB接続に関するコードを、下記の通り変更してください。 |
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=
↓
DB_CONNECTION=pgsql
DB_HOST=postgres # DB_HOSTはDockerのdbコンテナのサービス名を指定
DB_PORT=5432
DB_DATABASE=tweet_laravel
DB_USERNAME=digskill
DB_PASSWORD=secret
タイムゾーンの変更
Laravelにデフォルトで設定されているタイムゾーンはUTC(協定世界時)となっており、そのままの設定でデータを登録すると、日本時間から9時間ずれた時刻が登録されてしまいます。
「config」フォルダー内の「app.php」を編集して、タイムゾーンを日本時間に設定しましょう。
手順2
(1) | 「config」フォルダー内の「app.php」ファイルを開き、該当箇所を下記のコードに変更してください。 |
'timezone' => 'UTC',
↓
'timezone' => 'Asia/Tokyo',
2. ログインしてみよう
DBの接続設定が完了したので、「tweet_laravel」DBの「users」テーブルに登録されている「email」カラムの値と「password」カラムの値が一致するユーザーでログインできることを確認しましょう。
「users」テーブルに登録されているid=1のユーザー情報抜粋
password | |
---|---|
test@test.com | testpass |
※「users」テーブルの「password」カラムに登録されているランダムな英数字は、「testpass」という文字列をハッシュ化(暗号化)した値です。Laravelの認証機能でユーザー登録をおこなうと、ハッシュ化されたパスワードがDBに登録されます。ログイン時に入力するパスワードもハッシュ化され、一致するデータがDBに存在するかでログイン判定をおこなっています。
なお、Laravelの認証機能でログイン処理を行うには、URL「/login」に対してPOST通信で「name="email"」と「name="password"」のデータを送信する仕様となっています。「login.blade.php」ファイルのフォームの構成を確認しておきましょう。
Laravelでは、formでデータを送る場合、formタグ内に「@csrf」と記述してCSRF(クロスサイト・リクエスト・フォージェリ)対策をする必要があります。
CSRFとは、Webサイトの脆弱性を利用したサイバー攻撃のひとつで、ログインユーザーになりすまして不正にリクエストを送信する攻撃です。
「@csrf」を記述することで、ログインユーザーを特定するCSRF「トークン」を自動的に生成し、CSRF攻撃を防止することができます。
手順3
(1) | http://localhost/login にアクセスし、emailに「test@test.com」、passwordに「testpass」と入力してログインボタンをクリックしてください。 |
ログインボタンクリック後のURLを確認し、「localhost/home」となっていればログイン成功です。
現在はログイン後の画面をまだ作成していないため、ページが存在しないことを表す404画面が表示されています。次回以降の手順で「/home」と対応するログイン後のページを作成していきましょう。
このページの学習を終えたら、Sourcetreeからコミット・プッシュをおこないましょう。