Laravel 5.6登录凭证多个表

时间:2018-02-20 22:32:21

标签: laravel login

我有两个不同的用户凭据表:"用户"和"联系人"。在联系人中,我已经存储了用户的电子邮件,电话和其他联系信息。我想在联系人表格中使用电子邮件来获取Laravel中的登录和身份验证方法,但我不知道如何设置用户和联系人模型或我需要的其他内容。知道如何在应用程序中使用联系人和用户表进行登录?我是Laravel的新人,感谢任何帮助,谢谢!

下面是mysql db中的基本表结构:

用户:id |用户名|密码

通讯录:电子邮件|电话|其他| USER_ID

2 个答案:

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