[英]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.