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/auth
、resources/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も同様に編集する。