【问题标题】:How to display validate error - reset password in Laravel 5.4如何显示验证错误 - 在 Laravel 5.4 中重置密码
【发布时间】:2017-03-15 20:17:50
【问题描述】:

我尝试从.../app/Http/Controllers/Auth/ResetPasswordController.php 中的验证中捕获错误消息:

public function reset(Request $request)
    {
        $this->validate($request, $this->rules(), $this->validationErrorMessages());

        $response = $this->broker()->reset(
                $this->credentials($request), function ($user, $password) {
            $this->resetPassword($user, $password);
        }
        );

        return $response == Password::PASSWORD_RESET
                ? $this->sendResetResponse($response)
                : $this->sendResetFailedResponse($request, $response);
    }

但如果验证在会话中失败,则没有错误。

在:

public function validate(Request $request, array $rules, array $messages = [], array $customAttributes = [])
    {
        $validator = $this->getValidationFactory()->make($request->all(), $rules, $messages, $customAttributes);
        if ($validator->fails()) {
            $this->throwValidationException($request, $validator);
        }
    }

抛出异常,但我不知道如何在会话中使用它。

但如果我在protected function formatValidationErrors(Validator $validator) 中检查$validator->errors()->getMessages() 错误消息存在:

array:1 [▼
  "password" => array:1 [▼
    0 => "The password confirmation does not match."
  ]
]

已编辑

在我的情况下,问题是在Kernel.php 中多次使用StartSession。在$middleware 中评论StartSession 后,会话中的闪存效果很好。我不知道它是如何以及何时发生的。 从此:

protected $middleware = [
            \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
            \Illuminate\Session\Middleware\StartSession::class,
            \App\Http\Middleware\LanguageSwitcher::class,
        ];

到这里:

protected $middleware = [
        \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
        //\Illuminate\Session\Middleware\StartSession::class,
        \App\Http\Middleware\LanguageSwitcher::class,
    ];

protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
(...)

【问题讨论】:

  • 请同时指出错误。
  • 你为在blade.php文件中显示消息而写了什么?

标签: php laravel blade laravel-5.4


【解决方案1】:

将此代码用于捕获验证错误

$this->validate($Request, [
    'Email' => 'required|unique:users',
    'Username' => 'required',
    'Password' => 'required',
    ]);

【讨论】:

  • 这没有发现任何问题,您需要在答案中将$Request 更改为$request,但它仍然会滑过页面,并直接回到password/reset 登录页面。
  • 我能够通过将 Email 更改为 'email' => 'required' 并评论用户名和密码条目来验证它,这至少帮助我确定了导致失败的原因。所以,dd($this->rules());还显示令牌,而不是用户名,所以我认为它必须是令牌。这至少给了我一些东西。
  • 编辑,好的,我能够诊断出它的令牌,结果是这个"_token" => "MzVpGGIhNiVBaRWixxxf4Z0FC7KxxXPVhixAKBmL" "token" => null 出于某种原因,令牌被隐藏了。
【解决方案2】:

请用以下代码替换您的代码:

    $this->validate($request, [
                'token' => 'required',
                'email' => 'required|email|max:35',
                'password' => 'required|confirmed|min:6|max:15',
            ]);

            $credentials = $request->only(
                'email', 'password', 'password_confirmation', 'token'
            );

            $response = Password::reset($credentials, function ($user, $password) {
                $this->resetPassword($user, $password);
            });
 switch ($response) {
            case Password::PASSWORD_RESET:
                return redirect($this->redirectPath())->with('status', trans($response));

            default:
                return redirect()->back()
                            ->withInput($request->only('email'))
                            ->withErrors(['email' => trans($response)]);
        }

【讨论】:

    猜你喜欢
    • 2019-03-26
    • 2018-11-05
    • 2018-01-29
    • 1970-01-01
    • 2017-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-21
    相关资源
    最近更新 更多