Laravel Auth 登录验证编辑

Posted

技术标签:

【中文标题】Laravel Auth 登录验证编辑【英文标题】:Laravel Auth login validation editing 【发布时间】:2020-07-12 11:30:06 【问题描述】:

我想编辑我的 laravel 登录表单。如果我在电子邮件和密码字段中输入数据(电子邮件正确,但密码不正确),则主要问题是。我收到一个错误,表明电子邮件不正确,而不是密码...我找到了解决方案,在 AutenticatesUsers.php 中编辑此方法。 来自:

protected function sendFailedLoginResponse(Request $request)

    throw ValidationException::withMessages([
        $this->username() => [trans('auth.failed')],
    ]);

收件人:

protected function sendFailedLoginResponse(Request $request)

    throw ValidationException::withMessages([
        $this->username() => [trans('auth.failed')],
        'password' => [trans('auth.failed_password')],
    ]);

但是现在如果我犯了一个错误,无论我在哪里得到两个错误......我该如何解决它?我想要好的输入验证。

已编辑:我正在重写 sendFailedLoginResponse 方法:

protected function sendFailedLoginResponse(Request $request)

    $user = User::where($this->username(), $request->$this->username())->first();

    if(\Hash::check($request->$this->username(), $user->email))
        throw ValidationException::withMessages([
            $this->username() => [trans('auth.failed')],
        ]);
     else
        throw ValidationException::withMessages([
            'password' => [trans('auth.failed_password')],
        ]);
    

但现在我收到此错误:App\Http\Controllers\Auth\LoginController 类的对象无法转换为字符串

附:对不起,如果问题很愚蠢,我是所有这些 Laravel 和 OOP 东西的新手......

【问题讨论】:

根据失败的值抛出 2 个异常。如果您将这两个条件都放在单次投掷中,如果失败,您将同时获得两个条件。我可能会在堆栈中上升到失败并调用该函数 【参考方案1】:

为此,您将使用验证本身,您应该像这样更改ValidateLogin

 $request->validate([                                                                                                                                                                                                                                                           
              $this->username() => 'bail|required|string|exists:users,username',                                                                                                                                                                                                                                    
              'password' => 'required|string',                                                                                                                                                                                                                                           
          ]);

如果您的数据库中不存在用户名,则通过此更改,laravel 将抛出异常,显示用户名不存在。 因此,当您的流程来到sendFailedLoginResponse 时,您将确定只是密码不正确,您可以仅针对密码抛出异常。

【讨论】:

有效!谢谢。还有一个问题。当页面因密码错误重定向回来时,我的电子邮件输入字段仍然是自动选择的,我在哪里可以编辑? 为此,您需要从 sendFailedLoginResponse 方法中删除 $this->username() => [trans('auth.failed')]

以上是关于Laravel Auth 登录验证编辑的主要内容,如果未能解决你的问题,请参考以下文章

laravel validator怎么验证整数

Laravel身份验证,我无法检索登录用户

视图中的 Laravel Multi-Auth @auth 语法

Laravel 未经身份验证无触发

身份验证问题 Laravel 5.2 登录仅在本地工作

将 Auth 中间件应用于所有 Laravel 路由