Laravelのmake:authを紐解いていく

自分用メモ

## View

```php:/views/layouts/app.blade.php

// config/app.phpから'locale'のところの言語を取得しているっぽい
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">

// {{ csrf_token() }}とはクロスサイトリクエストフォージェリ対策
<meta name="csrf-token" content="{{ csrf_token() }}">

// {{  }}⬅️二重に中括弧を囲んで中にコードを実行することによってXSS攻撃を防いでいるのだそう。
// PHPのhtmlspecialchars関数が実行されているらしい。
// {{ url('/') }}⬅️ホームに飛ばす
// config('app.name', 'Laravel')
// ⬆️configフォルダ内のapp.phpファイル内のnameの箇所をしている。
// config/app.phpに'name' => env('APP_NAME', 'Laravel'),との記載がある。
// envファイル内のAPP_NAMEの箇所に指定するもの。
//env関数とは環境変数の値を取得するもの。取得できない場合はデフォルト値を返す。
// 結論としてログインページに遷移した時の左上のLaravelのアイコンはここから来ている、消しても問題なし。
<a class="navbar-brand" href="{{ url('/') }}">
 {{ config('app.name', 'Laravel') }}
</a>

// ログインしていないユーザーの場合(@authでも大丈夫)
@guest
 // もしregisterというルートがあったらregisterに繋がるリンクを表示する
 @if (Route::has('register'))
// ログインしていたら
@else
 // Auth::user（）がログインユーザーの情報を返す役割をしているため、
 // もしログインしていたらそのユーザー名を表示するという意味となる
 {{ Auth::user()->name }}

//リクエスト中のトークンとセッションに保存されてるトークンが一致するか確認している
@csrf
```

```php:/views/auth/login.blade.php

// エラーが起きた際に翻訳ファイルに記載されている内容をエラーメッセージとしてviewに返す
@error('email')

// ユーザーが直前に入力した内容を返すもの
// バリデーションチェックに引っかかった場合直前の何も入力されていないページに戻されるが
// oldを使うことで入力内容を保持することができる
{{ old('remember') }}

```

## Controller

```php:/app/Http/Controllers/Auth/ConfirmPasswordController.php

// /app/Providers/RouteServiceProvider.phpのHOME定数に記載されているパスをリダイレクトするっていう意味だと思われる
protected $redirectTo = RouteServiceProvider::HOME;

// クラスからインスタンスを生成する際に最初に実行される関数がコンストラクタ
// PHPのコンストラクタの描き方で下記の通りにするとコンストラクタのメソッドを作ることができる
// コンストラクタはnewをするだけで実行できる
public function __construct()
{
// middlewareのauthを利用することを明記した文
// authとはKernel.phpより\App\Http\Middleware\Authenticate::class,を利用するとのこと
  this->middleware('auth');
}
```

```php:/app/Http/Controllers/Auth/LoginController.php
// Kernel.phpから'guest'は\App\Http\Middleware\RedirectIfAuthenticated::class
// except('logout')はログイン中の'guest'ミドルウェアからは除くという意味
// Laravelでいうゲスト状態すなわちログインをしていない状態からは'logout'を除くということ？
// だからゲストユーザーはログアウトができないということなのでしょうか
$this->middleware('guest')->except('logout');
```

```php:/app/Http/Controllers/Auth/RegisterController.php
// 受け取った配列のバリデーションチェック
protected function validator(array $data)
{
// $dataにエラー内容を返している
// 任意のバリデーションを加えるならここに追記？
        return Validator::make($data, [
            'name' => ['required', 'string', 'max:255'],
            'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
            'password' => ['required', 'string', 'min:8', 'confirmed'],
        ]);
}

```

## Middleware

```php:/app/Http/Controllers/Middleware/Authenticate.php

protected function redirectTo($request)
{
//もしログインしていなかったらログイン画面に遷移させる
  if (! $request->expectsJson()) {
       return route('login');
  }
}

```

```php:/app/Http/Controllers/Middleware/RedirectIfAuthenticated.php

public function handle($request, Closure $next, $guard = null)
{
// AuthとはIlluminate\Auth\AuthManagerでguard()メソッドを実行
// check()はログインしているかしていないかをbooleanで返す
// ユーザーが認証済みなら/homeへリダイレクト
  if (Auth::guard($guard)->check()) {
      return redirect(RouteServiceProvider::HOME);
  }
// ログインしているかを判定できるように$requestとして値を返す
    return $next($request);
}
```

```php:/app/Contollers/examplecontroller.php
//もしログインしていない場合はログインページに飛ばす
class モデル名Controller extends Controller
{
  public function __construct(){
    $this->middleware('auth');
  }
}
```

```
// ログイン中のユーザー情報を取得
Auth::user();
// ログイン中のユーザーIDの取得
Auth::id();
// ログインチェック
Auth::check();
// ログアウト
Auth::logout();
```

```php:/app/Contollers/examplecontroller.php
use Auth;
class モデル名Controller extends Controller
{
    public function ブレード名(){
        $auths = Auth::user();
// blade内で$authsの情報が渡っていく
        return view('ブレード名', [ 'auths' => $auths ]);
    }
}
```