Php Laravel通过公司名称、用户名和密码验证登录

Php Laravel通过公司名称、用户名和密码验证登录,php,laravel,laravel-5,laravel-5.3,Php,Laravel,Laravel 5,Laravel 5.3,我喜欢用户按公司名称、用户名和密码登录-他们需要输入所有这些字段 用户名和密码字段位于用户表中。 公司名称位于公司表中 用户名可以在用户表中重复,但每个用户名属于不同的公司名称公司id在用户表中定义 如何根据公司名称、用户名和密码进行身份验证 我查看了attemptLogin()方法 protected function attemptLogin(Request $request) { return $this->guard()->attempt(

我喜欢用户按公司名称、用户名和密码登录-他们需要输入所有这些字段

用户名
密码
字段位于
用户
表中。
公司名称
位于
公司
表中

用户名
可以在
用户
表中重复,但每个用户名属于不同的公司名称<代码>公司id在
用户
表中定义

如何根据公司名称、用户名和密码进行身份验证

我查看了
attemptLogin()
方法

 protected function attemptLogin(Request $request)
    {
        return $this->guard()->attempt(
            $this->credentials($request), $request->has('remember')
        );
    }
我不能覆盖它,因为我需要传递属于公司的特定用户,然后进行身份验证检查

更新:

protected function authenticated(Request $request, User $user)
{
    if (!$user->enable) {
        Auth::logout();

        return redirect('/login')->with('status', 'Account is disabled');
    }

    return redirect()->intended('/');
}

您可以DIY登录请求或控制器,如

// find user
$user = User::where...

// check user
// ...

// make he login
auth()->login($user);

另外,如果用户表中有company_id字段

它属于一对一的雄辩关系


所以你可以用这个方法

   $user_company_name =  User::first()->company_name;

你可以检查这个东西。

你可以DIY登录请求或控制器,就像这样

// find user
$user = User::where...

// check user
// ...

// make he login
auth()->login($user);

另外,如果用户表中有company_id字段

它属于一对一的雄辩关系


所以你可以用这个方法

   $user_company_name =  User::first()->company_name;

您可以检查这件事。

因为
用户名
公司名称
对是唯一的,所以您可以执行以下操作:

protected function attemptLogin(Request $request)
{
    $user = User::where('username', $request->username)
        ->where(function ($q) use ($request) {
            q->whereHas('company', function ($q) use ($request) {
                $q->where('company_name', $request->company_name);
            })
            ->orWhereHas('warehouse', function ($q) use ($request) {
                $q->where('company_name', $request->company_name);
            });
        })
        ->first();

    return !is_null($user) && \Hash::check($request->password, $user->password));
}

protected function validateLogin(Request $request)
{
    $this->validate($request, [
        'company_name' => 'required',
        'username' => 'required|string',
        'password' => 'required|string',
    ]);
}

由于
用户名
公司名称
对是唯一的,因此可以执行以下操作:

protected function attemptLogin(Request $request)
{
    $user = User::where('username', $request->username)
        ->where(function ($q) use ($request) {
            q->whereHas('company', function ($q) use ($request) {
                $q->where('company_name', $request->company_name);
            })
            ->orWhereHas('warehouse', function ($q) use ($request) {
                $q->where('company_name', $request->company_name);
            });
        })
        ->first();

    return !is_null($user) && \Hash::check($request->password, $user->password));
}

protected function validateLogin(Request $request)
{
    $this->validate($request, [
        'company_name' => 'required',
        'username' => 'required|string',
        'password' => 'required|string',
    ]);
}

我忘了在用户表中提到,它可以是公司id或仓库id。如果公司id为空,那么请对照
仓库
表检查仓库id,该表也有
公司名称
,以防您想要它干净整洁,请做好自己的防范,并关注
尝试()
方法。@我会回来的,我已经更新了答案,如果您正确定义了
仓库
公司
关系,它将对您有用。@AlexeyMezenin谢谢您,我现在就测试它@Kyslik提到要做自己的守卫?因此,我可以在配置文件中的
auth.php
中创建另一个?阅读关于制作自己的防护的文档(我在电话中无法链接到您);之后,更改配置文件,使闪亮的防护罩成为默认防护罩。通过这样做,您将转移尝试登录到警卫的责任,您的控制器可能会薄几行。我忘了在用户表中提到,它可以是公司id或仓库id。如果公司id为空,请对照
仓库
表检查仓库id,该表也有
公司名称
,以防您想要它干净整洁,请做好自己的防范,并专注于
尝试()
method。@我会回来的。我已经更新了答案,如果您正确定义了
warehouse
company
关系,它将对您有用。@AlexeyMezenin谢谢您,我现在就测试它@Kyslik提到要做自己的守卫?因此,我可以在配置文件中的
auth.php
中创建另一个?阅读关于制作自己的防护的文档(我在电话中无法链接到您);之后,更改配置文件,使闪亮的防护罩成为默认防护罩。通过这样做,您将转移尝试登录到警卫的责任,并且您的控制器可能会变薄几行。因为您的答案远离解决方案,并且无法使用。因为您的答案远离解决方案,并且无法使用。