Laravel入門トップページ


目次

  1. Composerのダウンロードとインストール
  2. コメント掲示板を作成してみよう
  3. リレーションシップを使いこなそう
  4. ユーザ認証の機能を実現しよう
    1. 概要と準備
    2. メールの設定
    3. 認証機能の実装
    4. 学籍番号の登録とログイン名
    5. 登録メールアドレスの認証
    6. パスワードのリセット
    7. プロフィールの表示
    8. パスワードの変更
  5. マルチ認証の機能を実現しよう
  6. MongoDB に接続しよう
  7. キューを利用しよう
  8. コマンド(コンソール)を利用しよう
  9. 本番環境にデプロイしよう

ユーザ認証の機能を実現しよう

認証機能の実装

目次に戻る

認証に必要なファイルの準備

Laravel ではユーザ認証に必要なファイル(ログイン画面のフォーム,ユーザ登録のフォーム,ユーザごとのトップページの雛形など)を簡単に準備することができる.php artisan make:auth を実行するだけで良い.

[GakuinHana@rin06 laravelUser]$ php artisan make:auth ⏎
これにより次のようなファイルが追加(編集)されたはずである.
  • app/Http/Controllers/HomeController.php
  • resources/views/auth/login.blade.php
  • resources/views/auth/passwords/email.blade.php
  • resources/views/auth/passwords/reset.blade.php
  • resources/views/auth/register.blade.php
  • resources/views/home.blade.php
  • resources/views/layouts/app.blade.php
  • routes/web.php

目次に戻る

データベースのマイグレーション

ユーザ登録のためのテーブルマイグレーションファイルは database/migrations/2014_10_12_000000_create_users_table.php と database/migrations/2014_10_12_100000_create_password_resets_table.php として標準で準備されている.もしも削除してしまっている場合は新規プロジェクトを作成するなどしてそこからコピーすればよい.

database/migrations/2014_10_12_000000_create_users_table.php
<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateUsersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->string('email')->unique();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('users');
    }
}
database/migrations/2014_10_12_100000_create_password_resets_table
<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreatePasswordResetsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('password_resets', function (Blueprint $table) {
            $table->string('email')->index();
            $table->string('token');
            $table->timestamp('created_at')->nullable();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('password_resets');
    }
}

マイグレーションファイルの準備(変更の必要はない)ができたら,データベースを生成する.エラーが出る場合は php ../composer.phar dump-autoload を実行すると良い.

[GakuinHana@rin06 laravelUser]$ php ../composer.phar dump-autoload ⏎
Generating optimized autoload files
[GakuinHana@rin06 laravelUser]$ php artisan migrate ⏎
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
[GakuinHana@rin06 laravelUser]$

これにより,ユーザ登録とログイン,ログアウトの機能が実現できた.試しに,メールアドレス「rinsaka@sample.com」で登録してみよう.「REGISTER」をクリックする.

user-1

必要事項を入力して「Register」を押してみる.

user-2

ユーザ登録が完了して,そのままログインできた.ログアウトしてみる.

user-3

もう一度ログインしてみる.

user-4

以上の設定で最低限の認証機能が実装できた.

目次に戻る

データベースの中身を確認してみる

認証機能が実装できたので,データベースの中身を sqlite で覗いてみよう.

[GakuinHana@rin06 laravelUser]$ sqlite3 database/database.sqlite ⏎
SQLite version 3.6.20
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> select * from users; ⏎
1|Koichiro Rinsaka|rinsaka@sample.com|$2y$10$GJMvwqAhQ5fp7B56vizHP.Rjnx8V1ZwtFDEaR67FbI7yEO7EeLCxO|dyqXFYN4mP7eSXKzGrdjIHN6XaP4qUH3kJG3taDNEhEdvBk0Gu0zQhgQhtEO|2018-06-30 14:15:35|2018-06-30 14:15:35
sqlite> .exit ⏎
[GakuinHana@rin06 laravelUser]$

パスワード情報はきちんとハッシュ化されて保存されていることがわかる.

目次に戻る

テストユーザの追加

テスト用に3名のユーザを追加するようにシーダーを設置しよう.まず,シーダーを生成する.

[GakuinHana@rin06 laravelUser]$ php artisan make:seeder UsersTableSeeder ⏎

次に,シーダーにテストデータを追加する.なお,ユーザのパスワードは22, 29, 36 行目のように,パスワードの文字列「password」を bcrypt() によってハッシュ化してデータベースに保存する.

database/seeds/DatabaseSeeder.php
<?php

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
         $this->call(UsersTableSeeder::class);
    }
}
database/seeds/UsersTableSeeder.php
<?php

use Illuminate\Database\Seeder;

use App\User;
use Carbon\Carbon;

class UsersTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
         DB::table('users')->delete();

        User::create([
          'name' => 'A. Sample',
          'email' => 'a@sample.com',
          'password' => bcrypt('password'),
          'created_at' => Carbon::now()
        ]);

        User::create([
          'name' => 'B. Sample',
          'email' => 'b@sample.com',
          'password' => bcrypt('password'),
          'created_at' => Carbon::now()
        ]);

        User::create([
          'name' => 'C. Sample',
          'email' => 'c@sample.com',
          'password' => bcrypt('password'),
          'created_at' => Carbon::now()
        ]);
    }
}

シーダーの記述ができたら,データベースをリセットしてシーダーを登録しよう.

[GakuinHana@rin06 laravelUser]$ php artisan migrate:rollback; php artisan migrate; php artisan db:seed ⏎
Rolling back: 2014_10_12_100000_create_password_resets_table
Rolled back:  2014_10_12_100000_create_password_resets_table
Rolling back: 2014_10_12_000000_create_users_table
Rolled back:  2014_10_12_000000_create_users_table
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
Seeding: UsersTableSeeder
[GakuinHana@rin06 laravelUser]$

実際にメールアドレス「a@sample.com」,パスワード「password」でログインできることを確認しよう.

user-5 user-6

また,ログアウトした状態で /home にアクセスしたときには,ログイン画面 /login に転送されることも確認しておこう.

なお,app/Http/Controllers/HomeController.php の __construct() 関数に $this->middleware('auth'); のようにミドルウェアを呼び出す設定がされている.これによって,/home 以下のページを表示するときにはログインが必須となる.試しに,この行をコメントにして実行し,ログアウトした状態で /home にアクセスしてみると良い.

dapp/Http/Controllers/HomeController.php
    public function __construct()
    {
        $this->middleware('auth');
    }

目次に戻る