Laravel Nova如何覆盖Nova登录控制器
我的项目需要用户名而不是电子邮件。我在Laravel 5.8和Nova v2.1.0中使用了这个。升级到L6.XN2.6.1后,一切都坏了。所以我重新开始安装干净的L6.x和N2.6.1。 现在我想自定义登录,但我不想像以前那样编辑任何Nova包脚本。 我已经将这段代码添加到nova/Http/Controllers/LoginController.php中,所有的工作都如期进行Laravel Nova如何覆盖Nova登录控制器,laravel,laravel-nova,Laravel,Laravel Nova,我的项目需要用户名而不是电子邮件。我在Laravel 5.8和Nova v2.1.0中使用了这个。升级到L6.XN2.6.1后,一切都坏了。所以我重新开始安装干净的L6.x和N2.6.1。 现在我想自定义登录,但我不想像以前那样编辑任何Nova包脚本。 我已经将这段代码添加到nova/Http/Controllers/LoginController.php中,所有的工作都如期进行 public function username() { return 'username'; } 当我将
public function username()
{
return 'username';
}
当我将代码添加到App/Nova/Http/Controller/LoginController.php(原始代码的副本)时,登录仍然需要电子邮件地址。或者正在使用nova中的原始文件。这是我的工作 我从中重写App\Http\Controllers\Auth\LoginController.php
class LoginController extends Controller
到
如果您想在登录页面上使用用户名或电子邮件,则必须添加此项。
此方法将确定用户输入凭证的方式
public function username()
{
$login = \request()->input("email");
$field = filter_var($login, FILTER_VALIDATE_EMAIL) ? 'email' : 'username';
\request()->merge([$field => $login]);
return $field;
}
因为用户可以使用电子邮件或用户名登录,但nova的默认登录只有一个输入框。如果用户输入错误的用户名或该用户名不存在,则必须添加此项以显示
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);
}
希望这有帮助谢谢,我会试试看。
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);
}