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