Php 如何在Laravel中使用另一个字段进行身份验证?

Php 如何在Laravel中使用另一个字段进行身份验证?,php,laravel,authentication,Php,Laravel,Authentication,在手册中,我可以阅读: 默认情况下,Laravel使用电子邮件字段进行身份验证。如果您想自定义此项,您可以在LoginController 但是,在我的情况下,我想使用我的公司提供的unique\u id字段来验证我的用户。此字段不是用户名,因此我对使用username()方法获取此字段感到很遗憾。有没有其他方法可以告诉Laravel Authentication使用非电子邮件的东西来对我的用户进行身份验证?忽略该方法被称为username()的事实,然后使用它。您可以覆盖Auth/LoginC

在手册中,我可以阅读:

默认情况下,Laravel使用电子邮件字段进行身份验证。如果您想自定义此项,您可以在
LoginController


但是,在我的情况下,我想使用我的公司提供的
unique\u id
字段来验证我的用户。此字段不是用户名,因此我对使用
username()
方法获取此字段感到很遗憾。有没有其他方法可以告诉Laravel Authentication使用非
电子邮件
的东西来对我的用户进行身份验证?

忽略该方法被称为
username()
的事实,然后使用它。

您可以覆盖Auth/LoginController中的
验证登录
凭证
方法

protected function validateLogin(Request $request)
{
    $request->validate([
        'unique_id' => 'required',
        'password' => 'required|string',
    ]);
}

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

您可以在
App\Http\Controllers\Auth\LoginController::class
中覆盖
username()
方法,如下所示:

/**
* Get the login username to be used by the controller
* You Username will be User $unique_id
*/
public function username()
{
    return 'unique_id'
}

您的意思是对于
make:auth
?是的默认值您仍然定义
username()
方法,您只需使其返回
unique\u id
,而不是
username
。如果不打算使用默认值,该方法只会告诉auth使用哪一列。是的,我同意
username()
方法的名称很不幸,但这就是方法。但是如果我手动调用
username
,我会得到一个混乱的结果,不是用户名,而是id。