データベースの接続

目次
  • 解説
  • 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のユーザー情報抜粋

emailpassword
test@test.comtestpass

※「users」テーブルの「password」カラムに登録されているランダムな英数字は、「testpass」という文字列をハッシュ化(暗号化)した値です。Laravelの認証機能でユーザー登録をおこなうと、ハッシュ化されたパスワードがDBに登録されます。ログイン時に入力するパスワードもハッシュ化され、一致するデータがDBに存在するかでログイン判定をおこなっています。

なお、Laravelの認証機能でログイン処理を行うには、URL「/login」に対してPOST通信で「name="email"」と「name="password"」のデータを送信する仕様となっています。「login.blade.php」ファイルのフォームの構成を確認しておきましょう。

Tips
@csrf」とは

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からコミット・プッシュをおこないましょう。