簡體   English   中英

TypeError: Illuminate\Auth\SessionGuard::login(): 參數 #1 ($user) 必須是類型 Illuminate\Contracts\Auth\Authenticatable,, App\Models\Admin giv

[英]TypeError: Illuminate\Auth\SessionGuard::login(): Argument #1 ($user) must be of type Illuminate\Contracts\Auth\Authenticatable,, App\Models\Admin giv

我是 laravel 的初學者。我正在使用 guard 進行多重授權。 我在我的管理員登錄中遇到了這個問題:TypeError Illuminate\Auth\SessionGuard::login(): Argument #1 ($user) must be of type Illuminate\Contracts\Auth\Authenticatable, App\Models\Admin given, called in C:\Users\DELL\survey\app\Http\Controllers\AdminController.php 第 34 行

這是 AdminController.php 文件

<?php

namespace App\Http\Controllers;
use App\Models\Admin;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\Contracts\Auth\Authenticatable;

class AdminController extends Controller
{
    public function login()
    {
        return view('admin.login');
    }
    public function authenticate(Request $request)
    {
        $request->validate([
            'email' => ['required', 'email'],
            'password' => ['required']
        ]);

        /** @var Admin $model */
        $model = Admin::query()->where('email', $request->get('email'))->firstOrFail();

        if(!$model){
            return back()->with('error', 'Email or password is incorrect');
        }

        if (!Hash::check($request->get('password'), $model->password)) {
            return back()->with('error', 'Email or password is incorrect');
        }

        Auth::guard('admin')->login($model);

        return redirect()->route('dashboard')
            ->with('success', 'Welcome ' . $model->name . '!');
    }
}

這是 login.blade.php

<x-guest-layout>
    <x-auth-card>
        <x-slot name="logo">
            <a href="/">
                <x-application-logo class="w-20 h-20 fill-current text-gray-500" />
            </a>
        </x-slot>

        <!-- Session Status -->
        <x-auth-session-status class="mb-4" :status="session('status')" />

        <!-- Validation Errors -->
        <x-auth-validation-errors class="mb-4" :errors="$errors" />
@include('partials.session-messages')
        <form method="POST" action="{{ route('admin-authenticate') }}">
            @csrf
<h3>Admin Login</h3><br>
            <!-- Email Address -->
            <div>
                <x-label for="email" :value="__('Email')" />

                <x-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-label for="password" :value="__('Password')" />

                <x-input id="password" class="block mt-1 w-full"
                                type="password"
                                name="password"
                                required autocomplete="current-password" />
            </div>

            <!-- Remember Me -->
            <div class="block mt-4">
                <label for="remember_me" class="inline-flex items-center">
                    <input id="remember_me" type="checkbox" class="rounded border-gray-300 text-indigo-600 shadow-sm focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50" name="remember">
                    <span class="ml-2 text-sm text-gray-600">{{ __('Remember me') }}</span>
                </label>
            </div>

            <div class="flex items-center justify-end mt-4">
                @if (Route::has('password.request'))
                    <a class="underline text-sm text-gray-600 hover:text-gray-900" href="{{ route('password.request') }}">
                        {{ __('Forgot your password?') }}
                    </a>
                @endif

                <x-button class="ml-3">
                    {{ __('Log in') }}
                </x-button>
            </div>
        </form>
    </x-auth-card>
</x-guest-layout>

我該如何解決?

您的管理員 model 應該是可驗證的!

use Illuminate\Foundation\Auth\User as Authenticatable;   
class Admin extends Authenticatable
{
   //Your code
}

由於您沒有返回剛剛創建的 model,因此在代碼上:

 /** @var Admin $model */
    $model = Admin::query()->where('email', $request->get('email'))->firstOrFail();


    if(!$model){
        return back()->with('error', 'Email or password is incorrect');
    }

它期望像,

return Admin::query()->where('email', $request->get('email'))->firstOrFail();

所以請確保,當您修改或返回時,也返回預期的 model。

就我而言,當我使用 jetstream auth 時,我想檢查用戶是否創建,所以我存儲了用戶變量,並顯示了一些消息,但忘記返回創建的用戶 model。 所以,這可能對某人有所幫助。 確保在創建新 Model 時返回預期的 Model。

go到文件registersuser.php第36行,刪除這段代碼$this->guard()->login($user);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM