【问题标题】:Laravel: How can I authenticate a user by e-mail, where the e-mail address is stored in a separate table?Laravel:如何通过电子邮件对用户进行身份验证,其中电子邮件地址存储在单独的表中?
【发布时间】:2016-04-25 15:07:29
【问题描述】:

我正在使用 Laravel 创建一个网站,我希望使用 Auth 中间件。为了让用户添加多个电子邮件地址和电话号码,以便他们有用于恢复等的备份选项,我将它们存储在与主 users 表不同的表中。

仔细查看身份验证文档并浏览一些用于身份验证的类,我不确定如何指定应从各自的表中检索电子邮件和电话号码,而不是从users表(email_addressesphone_numbers)。

如果有人能告诉我如何设置它,或者至少指出我正确的方向,我将非常感激。不需要把它拼出来,但如果有人知道我需要编辑哪些文件,那会很有帮助。

【问题讨论】:

  • 您的用户仍会在Users 表中,对吗?如果是这样,您可以使用 Eloquent Relations 来处理它。 laravel.com/docs/5.2/eloquent-relationships
  • @MuhammadKashifAbbasi 是的,用户在users 表中。那么如果我设置了从UserEmailAddress 的一对多关系,Auth::attempt(['address' => $email, 'password' => $password]) 会自动检查两个模型上的“地址”属性吗?
  • 我认为这是不可能的,因为 laravel 提供的身份验证只使用一张表进行身份验证。我的本意是创建关系,然后编写你自己的实现,比如 trait AuthenticatesUsers。除了从 laravel 更改 Auth 模块之外,我认为您无能为力

标签: php authentication laravel-5.2


【解决方案1】:

通过电子邮件从电子邮件表中获取您的用户记录:

$record = Emails::where('email', $email)->first();

if($record){
    //if this email is valid you will get the user record
    if(auth()->validate(['id' => $record->user_id, 'password' => $input['password']])) auth()->loginUsingId($record->user_id)
    else echo 'Invalid password';
}
else {
    echo 'User not present!'
}

【讨论】:

  • 我想我必须通过手动身份验证来做这样的事情。感谢你的回答。 :)
【解决方案2】:

当客户要求您未见过的东西时,就会出现疯狂的情况。无论如何,这为我们提供了最好的学习方法,我喜欢这类客户。

protected function credentials(Request $request)
{
return $request->only('customer_id', 'password', 'dob');
}

并将其插入到 LoginController.php 中。

我们必须废除另一种策略才能使其发挥作用,那就是 validateLogin() 。它用于批准来自 login.blade.php 的请求

/**
* Validate the user login request.
*
* @param \Illuminate\Http\Request $request
* @return void
*/
protected function validateLogin(Request $request)
{
$this->validate($request, [ 'customer_id' => 'required|string',
'password' => 'required|string',
'dob' => 'required|date'
]);
}

你可以通过here查看这个

【讨论】:

    猜你喜欢
    • 2018-02-12
    • 2014-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-02
    • 1970-01-01
    相关资源
    最近更新 更多