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 登录验证编辑的主要内容,如果未能解决你的问题,请参考以下文章