Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel Nova如何覆盖Nova登录控制器_Laravel_Laravel Nova - Fatal编程技术网

Laravel Nova如何覆盖Nova登录控制器

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'; } 当我将

我的项目需要用户名而不是电子邮件。我在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';
}

当我将代码添加到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);
    }