Php Laravel 7多个身份验证角色

Php Laravel 7多个身份验证角色,php,laravel,authentication,roles,laravel-7,Php,Laravel,Authentication,Roles,Laravel 7,我正在尝试为一个站点创建自定义的身份验证角色,我跟随了另一个堆栈溢出帖子,它似乎可以正常工作,但我的总是失败,我知道信息存在,因为一旦auth::guard失败,我会将信息转储并关闭到屏幕上。问题是,即使信息存在,auth-guard也会失败 if (Auth::guard('Admin')->attempt(['Username' => $Request->input('UName'), 'Password' => $Request->input('Passwor

我正在尝试为一个站点创建自定义的身份验证角色,我跟随了另一个堆栈溢出帖子,它似乎可以正常工作,但我的总是失败,我知道信息存在,因为一旦auth::guard失败,我会将信息转储并关闭到屏幕上。问题是,即使信息存在,auth-guard也会失败

if (Auth::guard('Admin')->attempt(['Username' => $Request->input('UName'), 'Password' => $Request->input('Password')]))
信息经过验证和批准,并设法通过

 if (Admins::where('Username', $Request->input('UName'))->exists()) {
            $AdminDetails = Admins::Where('Username', $Request->input('UName'))->first();
            if(Hash::check($Request->input('Password'), $AdminDetails->Password)){
                   //user details are correct
            }
  }
我已经为用户和管理员创建了authenticable。上面的代码试图授权管理员,我还更改了config/auth.php文件,如下所示

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

        'api' => [
            'driver' => 'token',
            'provider' => 'users',
            'hash' => false,
        ],
        'Admin' => [
            'driver' => 'session',
            'provider' => 'Admin',
        ],
        'User' => [
            'driver' => 'session', 
            'provider' => 'User',
        ],
    ],
模型位于正确的名称空间内,如下所示,并带有admin authenticate表

<?php
namespace App\Models;

use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class Admins extends Authenticatable
{
    use Notifiable;

    protected $guard = 'Admin';

    protected $fillable = [
        'FName', 'LName', 'Email', 'Password', 'Username'
    ];

    protected $hidden = [
        'password'
    ];
}
<?php

namespace App\Models;


use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class Users extends Authenticatable
{
    use Notifiable;

    protected $guard = 'User';

    protected $fillable = [
        'FullName', 'Email', 'CompanyName','ReferedBy','PhoneNumber','MemberStatus','CustomMessage',
    ];

    protected $hidden = [
        'password', 'remember_token',
    ];
}

将凭证数组传递给
Auth::trunt
时,保存密码的元素必须命名为
password
,它与表上的任何字段名都没有关系。这就是用户提供者如何知道哪个字段应该是“密码”,因为它需要进行哈希检查;除了凭证中的
密码
,其他每个字段都是查询条件所在的字段

['Username' => ..., 'password' => ...]
如果您的模型/表格使用的密码字段与
密码
不同,则您必须通过定义
getAuthPassword
方法告诉模型:

public function getAuthPassword()
{
    return $this->Password;
}

将凭据数组传递给
Auth::trunt
时,必须将保存密码的元素命名为
password
,它与表上的任何字段名都没有关系。这就是用户提供者如何知道哪个字段应该是“密码”,因为它需要进行哈希检查;除了凭证中的
密码
,其他每个字段都是查询条件所在的字段

['Username' => ..., 'password' => ...]
如果您的模型/表格使用的密码字段与
密码
不同,则您必须通过定义
getAuthPassword
方法告诉模型:

public function getAuthPassword()
{
    return $this->Password;
}

模型使用的是密码而不是密码,因此如果我将p改为小写,问题将得到解决?如果您将表的字段改为
Password
,并调整凭证数组,这样,您就不必自己定义
getAuthPassword
方法,因为它将使用默认值,即
password
字段。这在Laravel中很常见,或者是一个例外。无论哪种方式,我都将开始使用小写字母,谢谢您的帮助。您可以根据需要命名字段,但如果特定字段不是
password
,则必须让身份验证系统知道这一点,因为默认情况下
getAuthPassword
返回
password
字段的值。。。但是,是的,通常字段都是小写的。该模型使用的是密码而不是密码,因此,如果我将p改为小写,问题就会得到解决。如果您将表的字段改为
Password
,并调整凭证数组,这样,您就不必自己定义
getAuthPassword
方法,因为它将使用默认值,即
password
字段。这在Laravel中很常见,或者是一个例外。无论哪种方式,我都将开始使用小写字母,谢谢您的帮助。您可以根据需要命名字段,但如果特定字段不是
password
,则必须让身份验证系统知道这一点,因为默认情况下
getAuthPassword
返回
password
字段的值。。。但是是的,通常字段都是小写的