首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel Nova如何重写nova LoginController

Laravel Nova如何重写nova LoginController
EN

Stack Overflow用户
提问于 2019-11-12 23:02:47
回答 1查看 1.1K关注 0票数 1

我的项目需要用户名,而不是电子邮件。我在Laravel 5.8和Nova v2.1.0中实现了这一点。升级到L 6.x N 2.6.1后,所有东西都坏了。所以我重新安装了干净的L6.x和N2.6.1。现在我想要自定义登录,但我不想像以前那样编辑任何Nova包脚本。我已经将这段代码添加到nova/Http/Controllers/LoginController.php中,一切工作正常。

代码语言:javascript
复制
public function username()
{
    return 'username';
}

当我将代码添加到App/Nova/Http/Controller/LoginController.php (原始代码的副本)时,登录仍然需要一个电子邮件地址。或者使用nova中的原始文件。

EN

回答 1

Stack Overflow用户

发布于 2019-12-19 12:40:06

我就是这么做的

我重写了来自

代码语言:javascript
复制
class LoginController extends Controller

代码语言:javascript
复制
class LoginController extends \Laravel\Nova\Http\Controllers\LoginController

如果你想在登录页面上使用用户名或电子邮件,你必须添加这个。此方法将确定用户如何输入他们的凭据

代码语言:javascript
复制
public function username()
    {
        $login = \request()->input("email");

        $field = filter_var($login, FILTER_VALIDATE_EMAIL) ? 'email' : 'username';
        \request()->merge([$field => $login]);

        return $field;
    }

因为用户可以使用电子邮件或用户名登录,但nova的默认登录只有一个输入框。如果用户输入了错误的用户名或该用户名不存在,则必须添加此内容才能显示

代码语言:javascript
复制
protected function sendFailedLoginResponse(Request $request)
    {
        throw ValidationException::withMessages([
            'email' => [trans('auth.failed')],
        ]);
    }

在我的控制器上,我添加了其他方法来确定用户是否为管理员,是否能够访问后端,或者用户是否仍处于活动状态。

代码语言:javascript
复制
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('/');
    }

通过添加方法来检查用户是否处于活动状态,我需要添加此方法来检查用户是否可以登录

代码语言:javascript
复制
    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);
    }

希望这能有所帮助

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58821321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档