Laravel ユーザー登録、ログイン・ログアウト機能(Seederでユーザー生成)

# ユーザー登録、ログイン・ログアウト機能生成

ユーザー登録やログイン・ログアウト機能はコントローラーやビューを作る必要があるが、
Laravelではコマンド一つで作成可能

```shell
$ php artisan make:auth
```

すると下記ファイルが自動生成される

```javascript
resources
|- views
   |- home.blade.php
   |- layouts
   |  |- app.blade.php
   |- auth
      |- passwprds
      |  |-email.blade.php
      |  |-reset.blade.php
      |- login.blade.php
      |- register.blade.php
      |- verify.blade.php
app
|- Http
   |- Controllers
   |  |- HomeController.php
   |- Auth
      |- ForgotPasswordController.php
      |- LoginController.php
      |- RegisterController.php
      |- ResetPasswordController.php
      |- VerificationController.php   
```

また、ルーティング`routes/web.php`に次のように追加される


```php:
Route::get('/', function () {
    return view('welcome');
});

// 以下が追加される内容
Auth::routes();
Route::get('/home', 'HomeController@index')->name('home');
```

- ルーティングではgetメソッドでサーバー側に要求が来た時の処理を定義する
- 第一引数にuri(ドメイン以降のurl)を指定し、第二引数に処理を指定する
- `Auth::routes();`では、`vendor/laravel/framework/src/Illuminate/Routing/Router.php`で定義されたルーティングが読み込まれる


## 生成されたコントローラとビューとエンドポイントの関係
生成されたエンドポイントとそれぞれのコントローラーとビューの役割と関係は次の通り

|URI(エンドポイント) |HTTPメソッド |コントローラー名@アクション名 |機能名 |
|---|---|---|---|---|
|/home |GET |HomeController@index |マイページ表示 |
|/register |GET |RegisterController@showRegistrationForm |ユーザー登録表示 |
|/register |POST |RegisterController@register |ユーザー登録 |
|/login |GET |LoginController@showLoginForm |ログイン表示 |
|/login |POST |LoginController@login |ログイン |
|/logout |POST |LoginController@logout |ログアウト |
|/password/reset |GET |ForgotPasswordController@showLinkRequestForm |パスワードリマインダー画面 |
|/password/email |POST |ForgotPasswordController@sendResetLinkEmail |パスワードリマインド |
|/password/reset/{token} |GET |ForgotPasswordController@showResetForm |パスワード再入力画面 |
|/password/reset |POST |ForgotPasswordController@reset |パスワード更新 |
|/email/verify |GET |VerificationController@show |Eメール認証画面 |
|/email/verify/{id} |GET |VerificationController@verify |Eメール認証 |
|/email/resend |GET |VerificationController@resend |Eメール認証メール再送信 |

※Eメール認証機能を使うには別途カラムが必要であったり、設定が必要となる


# seederを使ってダミーデータを入れる
LaravelにはDBのテーブルにダミーデータを入れる機能がある

- ログイン機能を作る際にユーザー登録機能が存在しない時にうまく動くかテストする際に使用したりする

```shell
# seederファイル作成
$ php artisan make:seeder {適当な名前}
# usersテーブルにダミーデータを追加したい場合の例
$ php artisan make:seeder UsersTableSeeder
```

### データを１つずつ入れる場合

`/database/seeds`配下に`UsersTableSeeder.php`が作成される

作成されたファイルの関数は空なので自分で追加する

```php:
<?php

use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB; 　// 関数でDBクラスを使えるように
use Carbon\Carbon;  // 関数でCarbonクラスを使えるように

class UsersTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        // ここが空なので以下を追加する
        DB::table('users')->insert([
            // ランダムもしくは特定の文字列を入れることも可能
            'name' => str_rand(10),  
            'email' => str_rand(10).'@example.com',
            // bcryptでハッシュ化
            'password' => bcrypt('password'),  
            // Carbonクラスのnowで現在時刻になる
            'created_at' => Carbon::now(),　　
            'updated_at' => Carbon::now(),
        ]);
    }
}
```

**Seeder**クラスを書き上げたら、Composerのオートローダを再生成するために、`dump-autoload`コマンドを実行する必要がある

```shell
$ composer dump-autoload
```

seederファイルを編集したら次のコマンドで実行する
実行するとseederで定義したダミーデータが作成される
実行するたびにダミーデータが一つずつ生成される

```shell
$ php artisan db:seed --class=UsersTableSeeder
```

ダミーデータを削除し、DB再生成は次のコマンド

```shell
$ php artisan migrate:refresh --seed
```

### データをまとめていっぱい作りたい場合は下記参考
[Laravel ダミーデータ登録(seeder, factory, faker)](https://qiita.com/KZ-taran/items/029d149c6cbba95fd111#%E5%A4%9A%E6%95%B0%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E7%99%BB%E9%8C%B2%E3%81%AE%E5%A0%B4%E5%90%88)