Laravel Nova如何覆盖Nova LoginController

问题描述 投票:0回答:1

我的项目需要用户名而不是电子邮件。我在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中的原始文件。

laravel laravel-nova
1个回答
0
投票

这就是我的目的

我覆盖来自的App \ Http \ Controllers \ Auth \ LoginController.php

class LoginController extends Controller

to

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);
    }

希望这会有所帮助

© www.soinside.com 2019 - 2024. All rights reserved.