繁体   English   中英

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

[英]how to login using username instead of email in laravel nova?

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

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

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

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

app\\Provider\\NovaServiceProvider.php

use Illuminate\Support\Facades\Route;

    //.....

    protected function routes()
    {
        $this->myLoginRoutes();
        Nova::routes()
                // ->withAuthenticationRoutes()
                ->withPasswordResetRoutes()
                ->register();        
    }

    /** ADD YOUR OWN LOGIN ROUTE */
    public function myLoginRoutes($middleware = ['web'])
    {
        Route::namespace('App\Nova\Http\Controllers\Auth')
            ->middleware($middleware)
            ->as('nova.')
            ->prefix(Nova::path())
            ->group(function () {
                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

// ADD THIS METHOD TO OVERRIDE 
    public function username()
    {
        return 'username';
    }

假设您已在用户迁移中将email更改为username

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

我创建了一个新的控制器

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

并创建一个新路由来覆盖 nova 路由

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

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

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

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

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

对我来说,它有助于在 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';
}

问候,

安德烈亚斯

将此添加到您的

novaFolder\src\Http\Controllers

——

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM