Laravel5.6系で試しました

まずはLaravelのバージョンの確認。

$ php artisan -V
Laravel Framework 5.6.29

ユーザー認証機能の作成

まっさらなLaravelプロジェクトを作って実装してみます。まずはユーザー認証機能を作成します。

$ php artisan make:auth
Authentication scaffolding generated successfully.

コマンドが成功するとファイルが追加されたり追記されたりします。

ルート情報への追記

/routes/web.phpファイルに以下のコードが追加されました。

Auth::routes();

これは、ログインやログアウトなどのユーザー認証関連のルート情報をまとめたもののようです。/vendor/laravel/framework/src/Illuminate/Routing/Router.phpの1130行目付近にある以下の関数が動作します。

public function auth()
{
    // Authentication Routes...
    $this->get('login', 'Auth\LoginController@showLoginForm')->name('login');
    $this->post('login', 'Auth\LoginController@login');
    $this->post('logout', 'Auth\LoginController@logout')->name('logout');

    // Registration Routes...
    $this->get('register', 'Auth\RegisterController@showRegistrationForm')->name('register');
    $this->post('register', 'Auth\RegisterController@register');

    // Password Reset Routes...
    $this->get('password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm')->name('password.request');
    $this->post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail')->name('password.email');
    $this->get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm')->name('password.reset');
    $this->post('password/reset', 'Auth\ResetPasswordController@reset');
}

もう1行は名前付きルートの設定です。

Route::get('/home', 'HomeController@index')->name('home');

コントローラーの追加

/app/Http/Contollers/HomeController.phpというコントローラーファイルが新規作成されました。内容は以下のような感じ。ミドルウェアの設定とビューの設定があります。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class HomeController extends Controller
{
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('auth');
    }

    /**
     * Show the application dashboard.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        return view('home');
    }
}

その他に認証用のコントローラーとして、/app/Http/Controllers/Authディレクトリに以下のファイルが最初から用意されています。

┗app
  ┗Http
    ┗Controllers
      ┗Auth
        ┣ForgotPasswordController.php  パスワードを忘れた人コントローラー
        ┣LoginController.php  ログイン・ログアウトコントローラ
        ┣RegisterController.php  ユーザー登録コントローラー
        ┗ResetPasswordController.php  パスワードリセットコントローラー

Bladeテンプレートの追加

ユーザー認証に使用するBladeテンプレートファイルがviewsディレクトリに新規追加されます。

┗resources
  ┗views
    ┣auth
    ┃┣passwords
    ┃┃┣email.blade.php  パスワードを忘れた人コントローラー
    ┃┃┗reset.blade.php  パスワードリセット用テンプレート
    ┃┣login.blade.php  ログイン用テンプレート
    ┃┗register.blade.php  ユーザー登録用テンプレート
    ┣layouts
    ┃┗app.blade.php  アプリケーション基本フレームテンプレート
    ┗home.blade.php  ホームページ用テンプレート

データベース関連の実装について

Laravelのインストール時にデフォルトで準備されているものを利用します。

マイグレーション

認証で使用するマイグレーションファイルは2つ。ユーザーデータ保存用のテーブルとパスワードリセット用のテーブルが以下のディレクトリに保存されています。

┗database
  ┗migrations
    ┣日時_create_users_table.php  ユーザーテーブル
    ┗日時_create_password_resets_table.php  パスワードリセットテーブル

モデル

ユーザーデータのモデルは、app/User.phpで定義されています。

<?php

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    use Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];
}

アクセスしてみる

php artisan serveでローカルサーバーを起動して、http://127.0.0.1:8000/loginにアクセスしてみると…

Laravelのデフォルトログイン画面

表示された!\(^o^)/
Bootstrapがデフォルトでインストールされているので、たったこれだけの作業でそれっぽいログイン画面ができる!けど勝手に色々やってくれる分、どこの何がどうなったかは理解していかないとなぁ。