我有两个不同的用户凭据表:"用户"和"联系人"。在联系人中,我已经存储了用户的电子邮件,电话和其他联系信息。我想在联系人表格中使用电子邮件来获取Laravel中的登录和身份验证方法,但我不知道如何设置用户和联系人模型或我需要的其他内容。知道如何在应用程序中使用联系人和用户表进行登录?我是Laravel的新人,感谢任何帮助,谢谢!
下面是mysql db中的基本表结构:
用户:id |用户名|密码
通讯录:电子邮件|电话|其他| USER_ID
答案 0 :(得分:1)
在LoginController
中,您可以覆盖attemptLogin
方法,如下所示:
public function attemptLogin(Request $request) {
$contact = Contact::where('email', $email)->first();
if (Auth::attempt(['id' => $contact->user_id, 'password' => $password])) {
// Authentication passed...
}
}
OR
public function attemptLogin(Request $request) {
$user = User::whereHas('contacts', function($query){
$query->where('email', $email);
});
if (Auth::login($user)) {
// Authentication passed...
}
}
答案 1 :(得分:0)
而不是覆盖attemptLogin()
,这对我来说不可行。我更喜欢覆盖credentials()
,以确保“正确”实现的所有身份验证都将使用“正确”值。
看起来如何:
/**
* Get authorization credentials from request.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
protected function credentials(Request $request)
{
// username is set in LoginController to email
$credentials = $request->only($this->username(), 'password');
$contact = Contact::where($this->username(), $credentials[$this->username()])->first();
// if we've not found a contact, we fallback to default
if (! $contact) {
return $credentials;
}
// else we set user_id and password as credential params
return array_merge($request->only('password'), [
'user_id' => $contact->user_id,
]);
}