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

时间:2018-08-23 16:16:59

标签: php laravel-nova

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

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

请帮助我如何在laravel nova中使用用户名登录。 预先感谢。

4 个答案:

答案 0 :(得分:1)

将此添加到您的

novaFolder\src\Http\Controllers

-

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

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

答案 1 :(得分:1)

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

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

复制
noeeditcancel

$(".noteedit").click(function(){ obj = $(this).parent().parent(); // get entire row cell = $(obj).find("td:eq(1)"); // get current value of cell $(obj).find("td:eq(2)").remove(); // remove adjacent cell cell.replaceWith("<td><form><input name='noteedit' value='" + cell.text() +"'></td><td><a onclick=\"$(this).parent().parent().find('form').submit();\" class='noteeditsubmit'><i class='material-icons green-text'>send</i></a><a class='noteeditcancel'><i class='material-icons grey-text'>cancel</i></a></form></td>") }); $(document).on('click', '.noteeditcancel', function(){ });
您可以随意修改视图中的内容。

复制
nova\src\resources\views\*

app\resources\views\vendor\nova\*
并将命名空间修改为App \ Nova \ Http \ Controllers \ Auth;

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


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

假定您在用户迁移中将nova\src\Http\Controllers\LoginController.php更改为app\Nova\Http\Controllers\Auth\LoginController.php

答案 2 :(得分: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';
}

致谢

安德烈亚斯

答案 3 :(得分:0)

我意识到这是一篇过时的文章,但是最近没有发现任何东西,我想我会展示处理这种情况的方法。

我创建了一个新的控制器

<?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处理其余部分。

我不确定该方法是否正确,但是可以防止覆盖核心文件或依赖复制的核心功能。

相关问题