如何在Laravel中进行自定义身份验证查询

时间:2017-03-07 05:31:59

标签: php laravel

我是使用Laravel的新手,我遇到了一些问题。当我使用以下命令创建auth时:

php artisan make:auth

它会自动创建Auth控制器,视图和默认用户表。 在这里,我想做一些不同的认证。我有一张这样的桌子:

员工

id | reg_number | name

用户

id | name | password | remember_token | employee_id | created_at | updated_at

当我登录时,我想加入employeesusers表,因此查询将如下:

select users.*, employees.reg_number inner join employees on employees.id = users.employee_id

然后,我想使用reg_numberpassword登录。

我怎样才能创造出类似的东西?

我一直在很多网站上搜索,但没有找到任何解决方案。提前感谢您的回答。

1 个答案:

答案 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']);
}