我的项目需要用户名而不是电子邮件。我在Laravel 5.8和Nova v2.1.0中进行了这项工作。升级到L 6.x N 2.6.1之后,一切都崩溃了。因此,我从干净的L 6.x和N 2.6.1安装开始。 现在,我想自定义登录名,但不想像以前一样编辑任何Nova Package脚本。 我已将此代码添加到nova / Http / Controllers / LoginController.php中,并且一切正常。
public function username()
{
return 'username';
}
当我将代码添加到App / Nova / Http / Controller / LoginController.php(原始副本)时,登录名仍需要一个电子邮件地址。或者正在使用nova中的原始文件。
答案 0 :(得分:0)
这就是我要做的
我从以下位置覆盖App \ Http \ Controllers \ Auth \ LoginController.php
class LoginController extends Controller
到
class LoginController extends \Laravel\Nova\Http\Controllers\LoginController
如果要在登录页面上使用用户名或电子邮件,则必须添加它。 该方法将确定用户如何输入凭据
public function username()
{
$login = \request()->input("email");
$field = filter_var($login, FILTER_VALIDATE_EMAIL) ? 'email' : 'username';
\request()->merge([$field => $login]);
return $field;
}
因为用户可以使用电子邮件或用户名登录,但是nova的默认登录只有1个输入框。如果用户输入错误的用户名或该用户名不存在,则必须添加此项以显示
protected function sendFailedLoginResponse(Request $request)
{
throw ValidationException::withMessages([
'email' => [trans('auth.failed')],
]);
}
在我的控制器上,我添加了其他方法来确定用户是管理员还是能够访问后端,或者该用户是否仍处于活动状态。
protected function authenticated(Request $request, $user)
{
if($user->isSuperAdmin()) {
return redirect(config('nova.path'));
}
if($user->can('backend')) {
return redirect(config('nova.path'));
}
return redirect('/');
}
通过添加方法来检查用户是否处于活动状态,我需要添加此方法来检查用户是否可以登录
private function activeUser($username)
{
$user = User::where($this->username(), $username)->first();
if($user) {
return $user->active;
}
return false;
}
public function login(Request $request)
{
$active = $this->activeUser($request->only($this->username()));
if(! $active) {
return $this->sendFailedLoginResponse($request);
}
return parent::login($request);
}
希望这会有所帮助