具有两个表的Laravel认证

时间:2015-11-19 14:02:56

标签: laravel authentication laravel-5 laravel-5.1

我正在尝试使用Laravel的内置Authentication类。在阅读它之后,它似乎只根据config/auth.php文件查看一个表。根据文档,我可以使用这样的语法:

if (Auth::attempt(['email' => $email, 'password' => $password, 'active' => 1])) {
    // The user is active, not suspended, and exists.
}

我担心的是,email列位于我的用户表中,而password位于 auth 表中。正如我上面所说,我对Laravel认证的理解是它只查找一个表。我错过了什么吗?

2 个答案:

答案 0 :(得分:4)

实际上解决方案非常简单。您只需要覆盖Authenticatable特征中定义的getAuthPassword方法,方法是将其添加到User模型中:

public function getAuthPassword()
{
    return \DB::table('auth')->where('user_id', $this->id)->pluck('password');
}

就是这样,现在验证系统会在检查它是否与用户输入匹配之前从auth表中获取密码。

答案 1 :(得分:0)

您可以手动验证用户身份。

  1. 通过电子邮件从您的user表中检索用户,密码来自 auth表(通过简单的连接或雄辩的关系)。
  2. 使用\Hash::check($password, $hashedPassword);验证密码是否正确。
  3. 如果您使用的是Eloquent,请使用Auth::login($user);手动登录用户;如果是简单的数据库查询,则使用Auth::loginUsingId($id);
  4. 文件: