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
中创建另一个?阅读关于制作自己的防护的文档(我在电话中无法链接到您);之后,更改配置文件,使闪亮的防护罩成为默认防护罩。通过这样做,您将转移尝试登录到警卫的责任,并且您的控制器可能会变薄几行。因为您的答案远离解决方案,并且无法使用。因为您的答案远离解决方案,并且无法使用。