LoginSignup
1
1

More than 5 years have passed since last update.

【Laravel入門】ユーザー認証機能と仮想メールサーバ

Last updated at Posted at 2018-05-05

今回はログイン機能を実装したい。さらに、仮想メールサーバの設定も含めて説明する。

まずはプロジェクトを作成し直したので、以下をサクッと設定する。最終的には掲示板形式のアプリにしたいので、プロジェクト名はlarabbsとした。

  • storageとbootstrap/cacheへのアクセス権限付与
  • config/app.phpの編集
  • データベース作成
  • .env編集

ユーザー認証機能の設定

LaravelではAuthという認証機能が提供されている。

公式ドキュメントより(一部抜粋)

インストールしたてのLaravelアプリケーションにて、php artisan make:authとphp artisan migrateを実行するだけです。

Laravelでは簡単に認証が実装できます。実際ほとんど全て最初から設定済みです。認証の設定ファイルはconfig/auth.phpに用意してあり、認証サービスの振る舞いを調整できるように、読みやすいコメント付きでたくさんのオプションが用意されています。

Laravelの認証機能は「ガード」と「プロバイダ」を中心概念として構成されています。ガードは各リクエストごとに、どのようにユーザーを認証するかを定義します。たとえば、Laravelにはセッションストレージとクッキーを使いながら状態を維持するsessionガードが用意されています。

プロバイダは永続ストレージから、どのようにユーザーを取得するかを定義します。LaravelはEloquentとデータベースクリエビルダを使用しユーザーを取得する機能を用意しています。しかし、アプリケーションの必要性に応じて、自由にプロバイダを追加できます。

混乱しても心配ありません。通常のアプリケーションでは、デフォルトの認証設定を変更する必要はありません。

一部理解が不十分な用語もあるが・・・要は、Laravelのログイン機能=ユーザー認証機能の設定はすでに下地が作られているので、あとはそれを実行(反映)させるだけでOK!ということだ。早速作業を進める。

マイグレーションファイルの編集

両方ともデフォルトで用意されているファイルだ。それぞれインデックスがuniqueとindexのemailカラムは、文字列を191文字以内に制限する。

2014_10_12_000000_create_users_table.php
$table->string('email', 191)->unique();
2014_10_12_100000_create_password_resets_table.php
$table->string('email', 191)->index();

Auth機能の追加

たったこれだけ。

$ php artisan make:auth
Authentication scaffolding generated successfully.

テーブルの作成

上記のファイルに基づき、マイグレーションでテーブルを作成する。これでuserテーブルpassword_resetsテーブルが作成された。(さらにmigrationsテーブルも!)

$ php artisan migrate
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated:  2014_10_12_000000_create_users_table
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated:  2014_10_12_100000_create_password_resets_table

実際にサーバを起動して確認すると、本当にphp artisan make:authphp artisan migrateの2つのコマンドだけで、ユーザー登録やログインができた。これは簡単。

仮想メールサーバの設定

mailtrapの利用

Authで認証機能を実装すると、パスワードを忘れた場合に再設定用のメールが送られてくる。しかし、現在の状態ではエラーになってしまう。これはメールサーバが登録されていないためだ。

今回作成したアプリではSMTPという方法でメールが送信されているが、これを扱うサーバを用意しなければ、送受信の確認ができない。

ここで役に立つのが、仮想SMTPサーバだ。これを利用すれば、メールを実際に送ることなく送受信状況をWebサーバ上で確認できる。目的がメールの送受信テストのみであれば、非常に役に立つ。

laravelは、デフォルトで仮想SMTPサーバmailtrapに対応している。設定も簡単なので、今回はこれを使用する。

mailtrap公式サイト(全て英語)

もちろん会員登録は必要になるが、GitHubアカウントでログインできるのは嬉しいところ。無料枠で利用できるメールボックスは1つのみだが、動作確認にはこれで十分だ。

ログインしたら、まずMy Inboxesからメールボックスを選択する。メールボックスはデフォルトのDemo inboxを使用しても良いし、これを削除して作成し直しても良い。

その後、選択したメールボックスのメール送受信状況や設定に必要な情報を見ることができる。設定についてはSMTP Settingsタブを見よう。今回の設定に必要な情報は、全てここにある。

設定方法は.envで環境変数を登録する方法と、config/mail.phpを直接編集する方法の2種類がある。それぞれ紹介する。

.envを編集

SMTP SettingsタブのCredentialsで各項目を確認する。書き換える項目はMAIL_USERNAMEMAIL_PASSWORDだけだ。

MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=Username
MAIL_PASSWORD=Password
MAIL_ENCRYPTION=null

mail.phpを編集

SMTP SettingsタブのIntegrationsでは、フレームワークごとにconfigファイルの設定に必要なコードが表示される。Laravel版はこちら。

return array(
  "driver" => "smtp",
  "host" => "smtp.mailtrap.io",
  "port" => 2525,
  "from" => array(
      "address" => "from@example.com",
      "name" => "Example"
  ),
  "username" => "Username",
  "password" => "Password",
  "sendmail" => "/usr/sbin/sendmail -bs",
  "pretend" => false
);

書き換えるべきファイルはconfig/mail.php。デフォルトでは以下の記述がされている。return文以下を上記のコードに書き換えよう。

改めてmail.phpを見ると、どこに.envの環境変数が反映されているか、メールサーバ構築に必要な設定は何かということが、少し見えてきた気がする。

config/mail.php
<?php

return [    
    'driver' => env('MAIL_DRIVER', 'smtp'),
    'host' => env('MAIL_HOST', 'smtp.mailgun.org'),   
    'port' => env('MAIL_PORT', 587),
    'from' => [
        'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'),
        'name' => env('MAIL_FROM_NAME', 'Example'),
    ],    
    'encryption' => env('MAIL_ENCRYPTION', 'tls'),
    'username' => env('MAIL_USERNAME'),
    'password' => env('MAIL_PASSWORD'),
    'sendmail' => '/usr/sbin/sendmail -bs',    
    'markdown' => [
        'theme' => 'default',
        'paths' => [
            resource_path('views/vendor/mail'),
        ],
    ],

];

動作確認

.envやmail.phpを書き換えたら、サーバを再起動する。

$ php artisan serve

もしくは設定ファイルを反映させるコマンドもある。しかし、このコマンドには注意が必要だ。詳しくは公式ドキュメントを参考にして欲しい。ローカル開発環境では、環境変数をenv関数のみに設定しなければコマンドを利用することができないそうだ。

Laravel 5.5 設定

$ php artisan config:cache
Configuration cache cleared!
Configuration cached successfully!

これで、mailtrap上でパスワード再設定時のメールの送受信状況が確認できる。公式サイト内は全て英語だが、レイアウトが見やすいので助かる。

あと、重要なのは.envやconfigファイルを編集した時には必ず上記のどちらかを行うことだ。

実は、正しい設定でメールの送受信確認をした後に、.envファイルを編集し誤った記述をしてしまった。しかし、サーバの再起動やconfigファイルの反映をしないまま動かしたら、そのまま正常に動いてしまったのだ。恐ろしい・・・

今回はここまで。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1