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();
对于我的网站,我希望有 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();