如何在 laravel nova 中使用用户名而不是电子邮件登录?

Man*_*ech 4 php laravel-nova

在我现有的 Laravel 项目中,我使用用户名处理登录。

我已经用 app\Nova\User.php 上的用户名替换了电子邮件

请帮助我如何在 laravel nova 中使用用户名登录。提前致谢。

小智 6

我意识到这是一篇旧文章,但我没有找到任何更新的内容,我想我应该展示一下处理这种情况的方法。

我创建了一个新的控制器

<?php

namespace App\Http\Controllers\Nova;

use Illuminate\Http\Request;

class LoginController extends \Laravel\Nova\Http\Controllers\LoginController
{
    public function authLogin(Request $request)
    {
        $request->request->add(['username' => $request->email]);

        return $this->login($request);
    }
    public function username()
    {
        return 'username';
    }
}
Run Code Online (Sandbox Code Playgroud)

并创建一条新路线来覆盖 nova 路线

Route::post('nova/login', 'Nova\LoginController@authLogin');
Run Code Online (Sandbox Code Playgroud)

所以你会注意到我扩展了 Nova 控制器。在我们的控制器中,我们将添加用户名函数,该函数将返回您的“用户名”字段。
现在 Nova 将使用新函数提供的用户名字段进行登录。

但是……这不是那么简单的哥们儿。

现在,Nova 认为该表单会将您的用户名字段作为新用户名函数提供的“用户名”传递。因此,让我们在新控制器中创建一个名为 authLogin 的函数。我们将获取当前表单字段“电子邮件”,并将新的“用户名”字段附加到我们的请求中。现在将请求传递给 Nova 提供的登录功能,并将新字段附加到请求中,并让 Nova 处理其余的事情。

我不完全确定这种方法是“正确”的方法,但它可以防止覆盖核心文件或依赖复制的核心函数。