在我现有的laravel项目中,我使用用户名来处理登录。
我已经用app \ Nova \ User.php上的用户名替换了电子邮件
请帮助我如何在laravel nova中使用用户名登录。 预先感谢。
答案 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处理其余部分。
我不确定该方法是否正确,但是可以防止覆盖核心文件或依赖复制的核心功能。