3

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

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

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

4

4 回答 4

4

我意识到这是一篇旧帖子,但我没有找到任何更新的帖子,我想我会展示我处理这种情况的方法。

我创建了一个新控制器

<?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';
    }
}

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

Route::post('nova/login', 'Nova\LoginController@authLogin');

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

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

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

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

于 2019-11-10T21:45:10.090 回答
3

在研究了这个问题之后,我已经解决了我自己的问题。这就是我要走的路。

app\Provider\NovaServiceProvider.php

    使用 Illuminate\Support\Facades\Route;

    //.....

    受保护的功能路线()
    {
        $this->myLoginRoutes();
        新星::路线()
                // ->withAuthenticationRoutes()
                ->withPasswordResetRoutes()
                ->注册();        
    }

    /** 添加你自己的登录路径 */
    公共函数 myLoginRoutes($middleware = ['web'])
    {
        Route::namespace('App\Nova\Http\Controllers\Auth')
            ->中间件($中间件)
            ->as('新星')
            ->前缀(新星::路径())
            ->组(函数(){
                Route::get('/login', 'LoginController@showLoginForm');
                Route::post('/login', 'LoginController@login')->name('login');
            });
    }   

复制
nova\src\resources\views\*

app\resources\views\vendor\nova\*
,您可以自由修改您想要查看的内容。

复制
nova\src\Http\Controllers\LoginController.php

app\Nova\Http\Controllers\Auth\LoginController.php
修改命名空间为 App\Nova\Http\Controllers\Auth;

app\Nova\Http\Controllers\Auth\LoginController.php

    // 添加这个方法来覆盖
    公共函数用户名()
    {
        返回“用户名”;
    }

假设您已更改emailusernamein users migration

于 2018-08-23T18:57:35.187 回答
1

对我来说,它有助于在 NovaServiceProvider 的启动功能中使用 loadViewsFrom 方法

$this->loadViewsFrom(__DIR__.'/../resources/views/vendor/nova', 'nova');

只需将所需的模板复制到 app/resources/views/vendor/nova/...

另请参阅:https ://laravel.com/docs/5.6/packages#views

除了用户模型的变化之外,这种变化应该可以解决大部分问题

/**
* Get the login username to be used by the controller.
*
* @return string
*/
public function username()
{
   return 'username';
}

问候,

安德烈亚斯

于 2018-08-30T09:44:29.207 回答
-1

将此添加到您的

novaFolder\src\Http\Controllers

--

/**
 * Get the login username to be used by the controller.
 *
 * @return string
 */
public function username()
{
    return 'username';
}

应该这样做,不要忘记将用户名列字段添加到您的表中

于 2018-08-23T16:46:01.373 回答