如何在laravel中使用密码确认更新现有用户表值

时间:2018-08-09 07:41:18

标签: php laravel-5

我正在使用Laravel 5.6,并将以系统管理员的身份更新我的用户表值(nameemailpassword)。

刀片文件

<form action="{{route('users.update',$user->id)}}" method="POST">
    {{method_field('PUT')}}
    {{csrf_field()}}

    <div class="form-group">
        <label for="name">Name</label>
        <input type="text" class="form-control" id="name" name="name" value="{{$user->name}}" >
    </div>
    <div class="form-group">
        <label for="email">Email</label>
        <input type="text" class="form-control" id="email" name="email" value="{{$user->email}}">
    </div>

    <div class="form-group">
        <label for="password">Password</label>
        <input type="password" class="form-control" id="password" name="password">
    </div>

    <div class="form-group">
        <label for="password_confirmation">Confirm Password</label>
        <input type="password" class="form-control" id="password_confirmation" name="password">
    </div>

    <button type="submit" class="btn btn-primary">Edit User</button>
</form>

和我的控制器

public function update(Request $request, $id)
{
  $user = User::findOrFail($id);
  $user->name = $request->name;
  $user->uservalue = $request->uservalue;
  $user->email = $request->email;
  $user->password = bcrypt($request->input('password'));
  $user->save();

  return view('users.show')->withUser($user);
}

问题

  

我的密码确认不起作用

这意味着我可以输入密码而无需确认和/或输入错误的确认密码。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

您必须添加密码以确认验证。为此,您的第二个密码字段必须称为password_confirmation(或foo和foo_confirmation)

public function update(Request $request, $id)
{
  $user = User::findOrFail($id);
  $request->validate([
    'password' => 'sometimes|min:6|confirmed'
  ]);
  $user->name = $request->name;
  $user->uservalue = $request->uservalue;
  $user->email = $request->email;
  $user->password = bcrypt($request->input('password'));
  $user->save();

  return view('users.show')->withUser($user);
}

您可以按照here的说明添加更多验证字段。如果验证失败,浏览器将把用户带回到更新页面。这些错误在您的视图中以$errors的形式出现在laravel错误包中。

sometimes表示如果有输入,则需要遵循以下规则。当您要更新用户信息时,如果访问者不想更新密码,可以将密码字段留空。在更新用户输入之前,请取消设置密码字段(如果为空)。