Laravel ではユーザ認証に必要なファイル(ログイン画面のフォーム,ユーザ登録のフォーム,ユーザごとのトップページの雛形など)を簡単に準備することができる.php artisan make:auth
を実行するだけで良い.
[GakuinHana@rin06 laravelUser]$ php artisan make:auth ⏎これにより次のようなファイルが追加(編集)されたはずである.
ユーザ登録のためのテーブルマイグレーションファイルは 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」をクリックする.
必要事項を入力して「Register」を押してみる.
ユーザ登録が完了して,そのままログインできた.ログアウトしてみる.
もう一度ログインしてみる.
以上の設定で最低限の認証機能が実装できた.
認証機能が実装できたので,データベースの中身を 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」でログインできることを確認しよう.
また,ログアウトした状態で /home にアクセスしたときには,ログイン画面 /login に転送されることも確認しておこう.
なお,app/Http/Controllers/HomeController.php の __construct()
関数に $this->middleware('auth');
のようにミドルウェアを呼び出す設定がされている.これによって,/home 以下のページを表示するときにはログインが必須となる.試しに,この行をコメントにして実行し,ログアウトした状態で /home にアクセスしてみると良い.
dapp/Http/Controllers/HomeController.php
public function __construct()
{
$this->middleware('auth');
}