我是使用Laravel的新手,我遇到了一些问题。当我使用以下命令创建auth时:
php artisan make:auth
它会自动创建Auth控制器,视图和默认用户表。 在这里,我想做一些不同的认证。我有一张这样的桌子:
员工
id | reg_number | name
用户
id | name | password | remember_token | employee_id | created_at | updated_at
当我登录时,我想加入employees
和users
表,因此查询将如下:
select users.*, employees.reg_number inner join employees on employees.id = users.employee_id
然后,我想使用reg_number
和password
登录。
我怎样才能创造出类似的东西?
我一直在很多网站上搜索,但没有找到任何解决方案。提前感谢您的回答。
答案 0 :(得分:2)
您正在尝试使用2个不同的表和2个不同的模型进行身份验证,因此通常的Auth::attempt()
可能无法正常工作。但是,您可以自己手动验证用户身份。这有任何安全风险/问题吗?我无法分辨。请与专家联系。
因此,当用户使用reg_number
登录时,您所做的就是。你做了
public function authenticate(Request $request)
{
$employee = Employee::where('reg_number', $request->reg_number)->first();
if ( !$employee ) { //If no employee was found
return redirect()->back()->withErrors(['reg_number' => 'No such reg_number ']);
}
//Assuming you have the relationship setup between employee and user
//probably a one to one.
$user = $employee->user;
//manually check their password
//assuming you hash every password when saving the user
if (Hash::check($request->password, $user->password)) {
//password matched. Log in the user
Auth::login($user);
return redirect()->intended('dashboard');
}
return redirect()->back()->withErrors(['credentials' => 'Check your credentials']);
}