首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Laravel 8- Illuminate\Auth\EloquentUserProvider::validateCredentials()

Laravel 8- Illuminate\Auth\EloquentUserProvider::validateCredentials()
EN

Stack Overflow用户
提问于 2022-05-16 15:26:56
回答 2查看 616关注 0票数 0

我有一个应用程序,我想要进行身份验证,但不使用用户模型。这个模型叫做Karyawan。但是,当我更改auth.php时,它开始显示以下错误:

Illuminate\Auth\EloquentUserProvider::validateCredentials():参数#1 ($user)必须类型为照明\Contracts\Auth\Authenticatable,App\Models\Karyawan给定,在第426行的C:\KKP\Project_KKP\vendor\laravel\framework\src\Illuminate\Auth\SessionGuard.php中调用

Laravel版本是8

auth.php

代码语言:javascript
运行
复制
'defaults' => [
    'guard' => 'web',
    'passwords' => 'users',
],

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],
],

'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => App\Models\Karyawan::class,
    ],
],

'passwords' => [
    'users' => [
        'provider' => 'users',
        'table' => 'password_resets',
        'expire' => 60,
        'throttle' => 60,
    ],
],

App\Models\Karyawan.php

代码语言:javascript
运行
复制
namespace App\Models;

use App\Models\Cuti;
use App\Models\Role;
use App\Models\Divisi;
use App\Models\Jabatan;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;

class Karyawan extends Model
{
    use HasFactory;

    protected $guarded = ['karyawan_id'];
    protected $table = 'karyawans';

    public function scopeSearch($query, array $searchs) {

        $query->when($searchs['search'] ?? false, function($query, $search) {
            return $query->where('nama', 'like', '%' . $search . '%')
            ->orWhere('divisi', 'like', '%' . $search . '%') 
            ->orWhere('jabatan', 'like', '%' . $search . '%')
            ->orWhere('agama', 'like', '%' . $search . '%')
            ->orWhere('nik', 'like', '%' . $search . '%'); 
        });
    }

    public function role_id()
    {
        return $this->belongsTo(Role::class);
    }

    public function divisi()
    {
        return $this->belongsTo(Divisi::class);
    }

    public function jabatan()
    {
        return $this->belongsTo(Jabatan::class);
    }

    public function cuti()
    {
        return $this->hasMany(Cuti::class);
    }
}

web.php

代码语言:javascript
运行
复制
Route::get('/', [BasicLoginController::class, 'login']);
Route::post('/', [BasicLoginController::class, 'authenticate']);

BasicLoginController.php

代码语言:javascript
运行
复制
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class BasicLoginController extends Controller
{

public function login()
{
    return view ('login.login', [
        'title' => 'Login'
    ]);
}

public function authenticate(Request $request) {
    $credentials = $request->validate([
        'email' => 'required|email:dns',
        'password' => 'required'
    ]);

    if(Auth::attempt($credentials)) {
        $request->session()->regenerate();
        return redirect()->intended('/dashboard');
    }

    return back()->with('loginError', 'Email atau Password salah');
}
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-05-16 15:33:34

正如错误说明的那样,类需要实现接口Illuminate\Contracts\Auth\Authenticatable,公共用户模型通过扩展类Illuminate\Foundation\Auth\User as Authenticatable;来实现该接口。

因此,要么在类中实现契约,然后在类中声明所有需要的方法功能。

只需扩展现有的Illuminate\Foundation\Auth\User

代码语言:javascript
运行
复制
namespace App\Models;

//...
use Illuminate\Foundation\Auth\User as Authenticatable;

class Karyawan extends Authenticatable
{

Illuminate\Foundation\Auth\User扩展了模型类Illuminate\Database\Eloquent\Model,因此模型功能仍然可用。

编辑:

在这里,复制粘贴这个模型,您应该学习一些PSRs,特别是PSR-4

代码语言:javascript
运行
复制
namespace App\Models;

use App\Models\Cuti;
use App\Models\Role;
use App\Models\Divisi;
use App\Models\Jabatan;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;

class Karyawan extends Authenticatable
{
    use HasFactory;

    protected $guarded = ['karyawan_id'];
    protected $table = 'karyawans';

    public function scopeSearch($query, array $searchs) {

        $query->when($searchs['search'] ?? false, function($query, $search) {
            return $query->where('nama', 'like', '%' . $search . '%')
            ->orWhere('divisi', 'like', '%' . $search . '%') 
            ->orWhere('jabatan', 'like', '%' . $search . '%')
            ->orWhere('agama', 'like', '%' . $search . '%')
            ->orWhere('nik', 'like', '%' . $search . '%'); 
        });
    }

    public function role_id()
    {
        return $this->belongsTo(Role::class);
    }

    public function divisi()
    {
        return $this->belongsTo(Divisi::class);
    }

    public function jabatan()
    {
        return $this->belongsTo(Jabatan::class);
    }

    public function cuti()
    {
        return $this->hasMany(Cuti::class);
    }
}
票数 1
EN

Stack Overflow用户

发布于 2022-05-16 15:33:47

类Karyawan需要实现Illuminate\Contracts\Auth\Authenticatableclass接口。或者可以在Karyawan类中扩展照明\Foundation\Auth\User。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72261708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档