Laravel Auth::guard('employee')->尝试无效

Laravel Auth::guard('employee')->attempt not working

对于我的网站,我希望有 2 名警卫:员工和客户。当我登录或注册时,我总是得到 302。当我进行员工登录时:

Auth::guard('employee')->attempt(['username' => $request->username, 'password' => $request->password])

我错了。我检查了 $request 并且值是正确的。当我在没有守卫的情况下做同样的事情时,我得到一个错误,他无法在用户中找到用户名。所以他使用守卫在右栏中搜索,但仍然没有找到它。用户名和密码的值在数据库中。但是,当我播种它时,它并没有被散列,因为我只是一个学生,而且它都在测试环境中。这会是个问题吗?我没有在这里发布中间件和所有这些东西,因为当我执行上面代码行的 dd() 时,我得到 "false" 所以是否存在尝试问题或者它真的需要中间件这行代码?

我的员工模型如下所示:

class Employee extends Authenticatable {

use Notifiable;

protected $guard = 'employee';

protected $fillable = [
    'name', 'username', 'password',
];

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

auth.php(短版)

'guards' => [
    'employee' => [
        'driver' => 'session',
        'provider' => 'employees',
    ],
    'customer' => [
        'driver' => 'session',
        'provider' => 'customers',
    ]
],
 'providers' => [
    'employees' => [
        'driver' => 'eloquent',
        'model' => App\Employee::class,
    ],
    'customers' => [
        'driver' => 'eloquent',
        'model' => App\Customer::class,
    ],

我的登录控制器

public function __construct()
{
    $this->middleware('guest')->except('logout');
    $this->middleware('guest:employee')->except('logout');
    $this->middleware('guest:customer')->except('logout');
}

public function adminLogin(Request $request)
{
    $this->validate($request, [
        'username' => 'required',
        'password' => 'required|min:6'
    ]);  

    if (Auth::guard('employee')->attempt(['username' => $request->username, 'password' => $request->password])) {
        return redirect()->intended('/employee/overview');
    }

    return back()->withInput($request->only('username'));
}

我知道这个问题被问了很多,但我搜索了很多都没有找到解决方案,问过我的网络老师,但他也没有找到问题所在。我也许可以使用一些有角色的东西,但我发现我不能这样做很愚蠢。我只想学会正确使用守卫

提前致谢!

在登录控制器中按照以下方式更改您的代码:

public function adminLogin(Request $request)
{
    $this->validate($request, [
        'username' => 'required',
        'password' => 'required|min:6'
    ]);  

    if (Auth::guard('employee')->attempt(['username' => $request->input('username'), 'password' => $request->input('password')])) {
        return redirect()->intended('/employee/overview');
    }

    return back()->withInput($request->only('username'));
}

问题是您的密码必须在数据库中散列

使用函数

$password=bcrypt($request['password']);

Hash::make($data['password'])

attempt 函数,查找散列密码。它需要输入密码,对其进行哈希处理,然后将其与您在数据库中拥有的密码进行比较。所以当你在数据库中保存数据时,确保你这样做:

$user->password = Hash::make($request->password);
$user->save();