【问题标题】:The email field is required but no input email in view Laravel电子邮件字段是必需的,但在视图 Laravel 中没有输入电子邮件
【发布时间】:2019-04-11 09:04:02
【问题描述】:

我不断收到此错误消息:

  • 电子邮件字段为必填项。

但在我看来,我没有任何名称为电子邮件的输入类型:

登录

    <link rel="shortcut icon" href="{{ asset('img/logo.png') }}" type="image/x-icon">

    <link href="https://fonts.googleapis.com/css?family=Open+Sans:400,600,800" rel="stylesheet">
    <link rel="stylesheet" href="{{ asset('css/bootstrap.min.css') }}">
    <link rel="stylesheet" href="{{ asset('css/feather.css') }}">
    <link rel="stylesheet" type="text/css" href="{{ asset('css/style.css') }}">
    <link rel="stylesheet" href="{{ asset('css/jquery.mCustomScrollbar.css') }}">

</head>

<body>

    <section class="login-block">
        <div class="container">
            <div class="row">
                <div class="col-md-12">
                    <form action="/login" method="post" class="md-float-material form-material">
                        @csrf
                        <div class="auth-box card">
                            <div class="card-block">
                                <div class="row m-b-20">
                                    <div class="col-md-12">
                                        <h3 class="text-center">Members Management System</h3>
                                    </div>
                                </div>

                                @if ($errors)
                                <div class="alert alert-danger background-danger">
                                    <button type="button" class="close" data-dismiss="alert" aria-label="Close">
                                        <i class="icofont icofont-close-line-circled text-white"></i>
                                    </button>
                                    @foreach ($errors->all() as $error)
                                        - {{ $error }}
                                        <br>
                                    @endforeach
                                </div>
                                @endif

                                <div class="form-group form-primary">
                                    <input type="text" name="employee_id" class="form-control" required=""
                                        placeholder="Employee ID">
                                    <span class="form-bar"></span>
                                </div>
                                <div class="form-group form-primary">
                                    <input type="password" name="password" class="form-control" required=""
                                        placeholder="Password">
                                    <span class="form-bar"></span>
                                </div>
                                <div class="row m-t-30">
                                    <div class="col-md-12">
                                        <button type="submit"
                                            class="btn btn-primary btn-md btn-block waves-effect waves-light text-center m-b-20">
                                            SIGN IN
                                        </button>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </form>
                </div>
            </div>
        </div>
    </section>

    <script src="{{ asset('js/jquery.min.js') }}"></script>
    <script src="{{ asset('js/jquery-ui.min.js') }}"></script>
    <script src="{{ asset('js/script.js') }}"></script>

</body>

</html>

我不明白为什么$errors 会通知我有关电子邮件的错误。有什么建议么?我没有从 Laravel 修改任何默认的 AUTH 设置。错误似乎来自其他来源?

编辑:

感谢您建议通过以下方式覆盖我的LoginController 中的username()

public function username()
{
    return 'employee_id';
}

这是最传统和首选的方法吗?谢谢你的帮助。

【问题讨论】:

  • 默认 laravel 设置邮箱和密码为基本认证,所以你需要覆盖它

标签: laravel laravel-5.8


【解决方案1】:

AuthenticatesUsers负责在用户提交表单后验证数据。如果你看一下这个文件,你会看到这个方法:

/**
 * Validate the user login request.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return void
 */
protected function validateLogin(Request $request)
{
    $this->validate($request, [
        $this->username() => 'required|string',
        'password' => 'required|string',
    ]);
}

更具体地说,如您所见,此方法负责在字段名称“password”上调用验证器,并通过方法 username()。如果你只想自定义用户名字段,你可以覆盖 LoginController 类中的 username() 方法:

public function username()
{
    return 'employee_id';
}

但是既然要自定义用户名字段名和密码字段名,我建议你重写LoginController类中的validateLogin()方法:

protected function validateLogin(Request $request)
{
    $this->validate($request, [
        'employee_id' => 'required|string',
        'user_password' => 'required|string',
    ]);
}

希望对您有所帮助。

【讨论】:

  • 所以这意味着我只需要在 LoginController 而不是 AuthenticateUsers 文件本身中进行覆盖?
  • 是的,你只需要覆盖LoginController
  • 当我在我的 LoginController 中执行 public function username() { return "employee_id"; } 时它起作用了
  • 是的,这就是我在回答中提出的建议 :) 我很高兴你找到了解决方案
【解决方案2】:

您可以在登录时将employee_id 称为username。 现在,打开 LoginController,并添加 username() 方法。

public function username() { return "username"; }

现在,您可以不使用电子邮件地址登录了。

【讨论】:

  • 等待是return "username" 还是return "emplyee_id"
  • 您应该给您的用户/员工、用户名,并使用username,而不是employee_id :)
猜你喜欢
  • 1970-01-01
  • 2023-03-06
  • 2014-05-22
  • 2018-07-31
  • 2015-08-03
  • 2014-03-01
  • 2018-01-12
  • 2019-04-30
  • 1970-01-01
相关资源
最近更新 更多