yama_choki
@yama_choki (yama choki)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Laravel Breeze マルチログイン Adminを追加したが、ログインできない

解決したいこと

Laravelの独学を進めています。
マルチログイン機能の学習をしており、Adminアカウントでのログインを実装中です。

を参考に学習を進めています。

Admin用の新規登録でDBにアカウントの登録はできました。
同じメールアドレスでは登録はできないようにもなっています。
👇DB
スクリーンショット_20221122_114108.png
👇新規登録フォーム 
スクリーンショット_20221122_113950.png

しかしログインフォームからログインしようとすると「ログイン情報がない」ということでログインができません。
👇ログインフォーム
スクリーンショット_20221122_114025.png

どこを修正すべきなのかわかりません。
ご教示いただけたら助かります。よろしくお願いいたします。

該当するソースコード

views/login.blade.php
<form method="POST" action="{{ route('admin.login') }}">
            @csrf

            <!-- Email Addressフォーム -->
            <div>
                <x-input-label for="email" :value="__('Email')" />

                <x-text-input id="email" class="block mt-1 w-full" type="email" name="email" :value="old('email')" required autofocus />
            </div>

            <!-- Passwordフォーム -->
            <div class="mt-4">
                <x-input-label for="password" :value="__('Password')" />

                <x-text-input id="password" class="block mt-1 w-full"
                                type="password"
                                name="password"
                                required autocomplete="current-password" />
            </div>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                <x-primary-button class="ml-3">
                    {{ __('Log in') }}
                </x-primary-button>
            </div>
        </form>

①👆のフォームに入力すると、どのコントローラーに飛ぶのかがわかりません。
app/admin/authを作成していて、
・AuthenticatedSessionController.php
・ConfirmablePasswordController.php
・EmailVerificationNotificationController.php
・EmailVerificationPromptController.php
・NewPasswordController.php
・PasswordResetLinkController.php
・RegisteredUserController.php
・VerifyEmailController.php
があります。
名前的には
・AuthenticatedSessionController.php
・ConfirmablePasswordController.php
のどちらかだと思っています。
以下がそのコードです。

AuthenticatedSessionController.php
<?php

namespace App\Http\Controllers\Admin\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()
    {
        return view('admin.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::HOME);
    }

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

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

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

        return redirect('/');
    }
}

ConfirmablePasswordController.php
<?php

namespace App\Http\Controllers\Admin\Auth;

use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Validation\ValidationException;

class ConfirmablePasswordController extends Controller
{
    /**
     * Show the confirm password view.
     *
     * @return \Illuminate\View\View
     */
    public function show()
    {
        return view('admin.auth.confirm-password');
    }

    /**
     * Confirm the user's password.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return mixed
     */
    public function store(Request $request)
    {
        if (! Auth::guard('web')->validate([
            'email' => $request->user()->email,
            'password' => $request->password,
        ])) {
            throw ValidationException::withMessages([
                'password' => __('auth.password'),
            ]);
        }

        $request->session()->put('auth.password_confirmed_at', time());

        return redirect()->intended(RouteServiceProvider::HOME);
    }
}

エラーコードなどがなく、コントローラーのどこを修正すべきなのかがわかりません。
何卒よろしくお願いいたします。

0

1Answer

php artisan route:listで確認すれば一目瞭然ですが、Adminのログイン時はAuthenticatedSessionController.phpのstoreメソッドを利用します。

sotreメソッド内の
return redirect()->intended(RouteServiceProvider::HOME);
この部分がログイン後にadminではないuser側のホーム画面に遷移しようとして、userはログインしていないため、userのログイン画面が表示されていないでしょうか。(実際にAdminはログイン出来ている)

正しくは
return redirect()->intended(RouteServiceProvider::ADMIN_HOME);
とすることでAdminのホーム画面に遷移できると思います。

0Like

Your answer might help someone💌