Laravel マルチログイン コントローラ View.blade作成

マルチログインコントローラ

マルチログイン設定の続き。
breezeインストール時にAuthフォルダが作成されてるのでそれをコピーして編集
App/Http/Controllers/Auth
resources/views/auth
owner.phpにguard権限付与

<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Owner\Auth\AuthenticatedSessionController;
use App\Http\Controllers\Owner\Auth\ConfirmablePasswordController;
use App\Http\Controllers\Owner\Auth\EmailVerificationNotificationController;
use App\Http\Controllers\Owner\Auth\EmailVerificationPromptController;
use App\Http\Controllers\Owner\Auth\NewPasswordController;
use App\Http\Controllers\Owner\Auth\PasswordResetLinkController;
use App\Http\Controllers\Owner\Auth\RegisteredUserController;
use App\Http\Controllers\Owner\Auth\VerifyEmailController;  
Route::get('/dashboard', function () {
    return view('dashboard');
    //guard権限:ownersを付与、→ownersの権限を持ってたらダッシュボードへ
})->middleware(['auth:owners'])->name('dashboard');
...
//guard権限の付与
Route::middleware('auth:owners')->group(function () {
    Route::get('verify-email', [EmailVerificationPromptController::class, '__invoke'])
                ->name('verification.notice');

use文で定義しているuser,owner,adminフォルダがないのでHttp\Controllers配下に3つ作成する。
App\Http\Controllers\ にOwnerフォルダ作ってその中にAuthフォルダをいれる
以下、コピーして3パターン作成する
App\Http\Controllers\Owner\Auth
App\Http\Controllers\Admin\Auth
App\Http\Controllers\User\Auth

実際にコピーしたコントローラを以下のようにすべてを編集していく↓↓
- ポイント
namespaceをフォルダ構成とあわせる
viewのprefixつける
view(‘login’) -> view(‘owner.login’) (フォルダ名.ファイル名)
RouteServiceProvider::HOME -> RouteServiceProvider::OWNER_HOME
Authのとこはガード設定いれる
Auth::guard(‘web’)->logout() -> Auth::guard(‘owners’)->logout()

RegisteredUserControllerには モデル読み込み、 バリデーション設定もあるので注意
use App\Models\User; ->OwnerやAdminに変更
$request->validate([
'email' => ‘required|string|email|max:255| unique:users' -> unique:owners, adminsに変更

User Owner Adminすべて変更する

<?php
//Ownerを追加
namespace App\Http\Controllers\Owner\Auth;

use App\Http\Controllers\Controller;
use App\Http\Requests\Auth\LoginRequest;
use App\Providers\RouteServiceProvider;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class AuthenticatedSessionController extends Controller
{
    /**
     * Display the login view.
     *
     * @return \Illuminate\View\View
     */
    public function create()
    {
        //定義したprefixをつける
        return view('owner.auth.login');
    }

    /**
     * Handle an incoming authentication request.
     *
     * @param  \App\Http\Requests\Auth\LoginRequest  $request
     * @return \Illuminate\Http\RedirectResponse
     */
    public function store(LoginRequest $request)
    {
        $request->authenticate();

        $request->session()->regenerate();
        //サービスプロバイダ編集
        return redirect()->intended(RouteServiceProvider::OWNER_HOME);
    }

    /**
     * Destroy an authenticated session.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\RedirectResponse
     */
    public function destroy(Request $request)
    {   //guardの切り替え
        Auth::guard('owners')->logout();

        $request->session()->invalidate();

        $request->session()->regenerateToken();
        //ownerへリダイレクト
        return redirect('/owner');
    }
}

viewの作成

resources/viewsの中にuserフォルダ作成 をする→その中にauthフォルダを いれてresources/views/user/authとし、welcome,dashboardもいれる
作成したuserフォルダをコピーし resources/views/admin/authresources/views/owner/auth を作成
resources/views/user/welcome.blade.php
routeファサードにuserをつける
@if (Route::has('user.login'))
@authディレクティブで認証しているか判断している。
→guard設定としてusersをいれる→userでログインしていたらダッシュボードが表示されるようになる。


authフォルダ内のbladeファイルのformタグを編集していく。
→form,action内のrouteにuserをつけていく
<form method="POST" action="{{ route('user.password.confirm') }}">
admin,ownerも同様に編集する。