首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel5.1密码::reset返回passwords.password

Laravel5.1密码::reset返回passwords.password
EN

Stack Overflow用户
提问于 2015-11-07 00:37:12
回答 4查看 1.9K关注 0票数 4

我在控制器中有这个函数,我不能重置密码,因为我想将字符长度更改为5位数字。

代码语言:javascript
复制
public function postReset(Request $request)
{
  $this->validate($request, [
    'token' => 'required',
    'password' => 'required|confirmed|digits:5',
  ]);

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

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

  dd($response);
  switch ($response) {
    case Password::PASSWORD_RESET:
      return redirect($this->redirectPath());

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

protected function resetPassword($user, $password)
{
  $user->password = bcrypt($password);
  $user->save();
  Auth::login($user);
}

但它总是说:

哇哦!你的输入有一些问题。

密码必须至少有六个字符,并与确认相符。

当我说:

代码语言:javascript
复制
dd($response);

它打印:

passwords.password

知道怎么解决这个问题吗?

EN

回答 4

Stack Overflow用户

发布于 2017-08-29 07:02:25

之所以会出现这种情况,是因为Illuminate\Auth\Passwords\PasswordBroker中存在硬编码验证。

当调用reset方法时,它总是先调用validateReset,然后调用validateNewPassword

代码语言:javascript
复制
public function validateNewPassword(array $credentials)
{
    list($password, $confirm) = [
        $credentials['password'],
        $credentials['password_confirmation'],
    ];

    if (isset($this->passwordValidator)) {
        return call_user_func(
            $this->passwordValidator, $credentials) && $password === $confirm;
    }

    return $this->validatePasswordWithDefaults($credentials);
}

默认情况下,没有设置passwordValidator。因此validatePasswordWithDefaults将要求密码至少有6个字符长。

可以使用passwordValidator设置Password::validator,后者接受必须返回指示给定凭据是否有效的布尔值的闭包。这需要在Password::reset之前完成。

例如,更改验证器以要求密码精确为5个字符的长度将特别满足您的要求。

代码语言:javascript
复制
Password::validator(function($credentials)
{
    return strlen($credentials['password']) === 5;
});
票数 3
EN

Stack Overflow用户

发布于 2015-11-09 15:11:16

你要找的是这门课:

代码语言:javascript
复制
\Illuminate\Auth\Passwords\PasswordBroker

而这个功能

代码语言:javascript
复制
validatePasswordWithDefaults

这看起来有点奇怪,因为6是在这个函数中硬编码的。我想也许有更好的做法来改变这种状况。也许你可以在你的控制器里超越这个功能。那也试试吧。

票数 2
EN

Stack Overflow用户

发布于 2015-11-09 01:11:30

更改这一行:

代码语言:javascript
复制
'password' => 'required|confirmed|digits:5'

代码语言:javascript
复制
'password' => 'required|confirmed|min:5'
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33577760

复制
相关文章

相似问题

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