Php Laravel 5.4更改密码

Php Laravel 5.4更改密码,php,laravel,laravel-5.4,Php,Laravel,Laravel 5.4,我目前正在处理配置文件页面,用户可以在其中更改其密码。我在UserController中创建了一个新函数changePassword() public function changePassword(Request $request, User $employee) { $validator = Validator::make($data, [ 'password' => 'required|string|min:6|confirmed', 'pas

我目前正在处理配置文件页面,用户可以在其中更改其密码。我在UserController中创建了一个新函数
changePassword()

public function changePassword(Request $request, User $employee) {
    $validator = Validator::make($data, [
        'password' => 'required|string|min:6|confirmed',
        'password_confirmation' => 'required|string|min:6|same:password'
    ]);

    if ($validator->fails()) {
        Session::flash('error', "Fill-out the form correctly. Try again!");
        return redirect()->back()->withErrors($validator);
    }

    $employee->password = bcrypt($request->password);
    $employee->save();
    return view('users.show', ['employee'=>$employee]);
}
我在用户模型的资源路由上方的
web.php
中创建了这个新路由

Route::put('users/{user}', 'UserController@changePassword')->name('users.changePassword');
每次单击submit按钮,我都会得到一个
方法NotAllowedHttpException
。我认为问题在于路线,但我不确定。除了发送电子邮件的功能外,还有Laravel功能吗?因为我希望用户在不使用电子邮件的情况下更改其密码。谢谢

这是我的表格

{!! Form::model($employee, ['method'=>'PUT', 'route'=>['users.changePassword', $employee]]) !!}

在你的路线中使用post而不是put,如下所示

Route::post('users/{user}', 'UserController@changePassword')->name('users.changePassword');
{!! Form::model($employee, ['method' => 'POST','route' => ['users.changePassword']]) !!}

--- Your Fields Code will go here ----

{!! Form::close() !!}
在您的表单中,您是否传递了“_方法”&CSRF令牌(如果您已禁用它,则不需要CSRF,但我建议始终使用它)

如果您使用Form和HTML类(ServiceProviders)在刀片服务器中创建HTML和表单,请按如下所示使用

Route::post('users/{user}', 'UserController@changePassword')->name('users.changePassword');
{!! Form::model($employee, ['method' => 'POST','route' => ['users.changePassword']]) !!}

--- Your Fields Code will go here ----

{!! Form::close() !!}

希望能有帮助

您需要在表单字段中添加
PUT
http动词。如果您使用的是laravelcollective:

{!! Form::model($employee, ['method' => 'put','route' => 
['users.changePassword']]) !!}

--- Your Fields Code will go here ----

{!! Form::close() !!}


{{method_字段('PUT')}

是否为路线设置参数

{!! Form::Model($user, ['action' => ['UserController@changePassword', $user->id],'method' => 'PUT']) !!}

{!! Form::close() !!}
试试这个

这段代码在我的项目中使用Laravel5.3

ubahprofilecontroller.php

public function updatePwd($id, Request $request)
       {
         //cek password lama
           $messages = array(
               'password_lama.required'=>'Harap masukkan password',
               'password_baru.required' => 'Password baru tidak boleh kosong',
               'ulangi_password.required' => 'Harap ketikkan ulang password baru',
               'ulangi_password.same' => 'Password baru dan konfirmasi password tidak cocok'
           );

           $rules = array (
             'password_lama'=> 'required',
             'password_baru'=> 'required',
             'ulangi_password'=> 'required|same:password_baru'
           );
           $validator = Validator::make ( Input::all (), $rules, $messages );

           if($validator->fails())
             {
                 /*return Redirect('edit_password')
                     ->withErrors($validator);*/
                     $password ='password';
                     return redirect('ubahPwd')->withErrors($validator)->withInput();
             }
           else
             {
               $check = User::where('id',$id)->first();
               if (Input::get('password_lama') == $check->value)
               {
                       if(Input::get('password_baru') == Input::get('ulangi_password'))
                         {
                           $check -> password = bcrypt(Input::get('password_baru'));
                           $check -> salt_password = Input::get('password_baru');
                           // save our duck
                           $check->save();

                             /*$msg = array('msg' => 'Password changed Successfully');*/
                             return redirect('ubahPwd')->with('success','Password berhasil diubah');
                         }
                         else
                         {
                             /*$msg = array('msg' => 'New password and Confirm password did not match');*/
                             return redirect('ubahPwd')->with('salah','Password baru dan konfirmasi password tidak sama');
                         }
               }
               else
               {
                 /*$msg = array('msg' => 'Current password is incorrect');*/
                 /*return Redirect('edit_password')
                               ->with('status-failed', 'Current password is incorrect');*/
                    return redirect('ubahPwd')->with('salah','Password lama salah');
               }
             }
      }
profile.blade.php

 <form class="form-horizontal" action="{{ url('/ubahPassword/update',Auth::user()->id )}}" method="POST">
              <<div class="content" style="padding-left:50px;padding-right:50px">

                <div class="form-group">
                    {{ csrf_field() }}
                  <label for="id" class="col-sm-3 control-label">ID</label>
                  <div class="col-sm-2">
                    <input type="text" class="form-control" id="id"  name="id" value="{{ Auth::user()->id }}" readonly>
                  </div>
                </div>

                <div class="form-group">
                  <label for="username" class="col-sm-3 control-label">Password Lama</label>
                  <div class="col-sm-6">
                    <input type="password" class="form-control" id="username" name="password_lama">
                    @if ($errors->has('password_lama')) <p class="help-block" style="color:red;">{{ $errors->first('password_lama') }}</p> @endif
                  </div>
                </div>

                <div class="form-group">
                  <label for="inputEmail3" class="col-sm-3 control-label">Password baru</label>
                  <div class="col-sm-5">
                    <input type="password" class="form-control" id="email" name="password_baru">
                    @if ($errors->has('password_baru')) <p class="help-block" style="color:red;">{{ $errors->first('password_baru') }}</p> @endif
                  </div>
                </div>

                <div class="form-group">
                  <label for="inputEmail3" class="col-sm-3 control-label">Ulangi Password</label>
                  <div class="col-sm-5">
                    <input type="password" class="form-control" id="email" name="ulangi_password">
                    @if ($errors->has('ulangi_password')) <p class="help-block" style="color:red;">{{ $errors->first('ulangi_password') }}</p> @endif
                  </div>
                </div>

              <div class="form-group">
                <button type="submit" class="btn btn-info pull-right col-sm-3">Simpan</button>
              </div>
            </div>
          </form>

密码喇嘛
@如果($errors->has('password\u lama'))

{{{$errors->first('password\u lama')}}

@endif 密码巴鲁 @如果($errors->has('password_baru'))

{{{$errors->first('password_baru')}}

@endif 乌兰吉密码 @如果($errors->has('ulangi_password'))

{{{$errors->first('ulangi_password')}}

@endif 辛潘

我希望我的回答能帮助你……

它不起作用,我想因为它是一个POST方法,它创建了一个新模型,而不是更新了一个现有的模型。我尝试过,它仍然不起作用,我所做的是创建一个UpdatePasswordController,它使用Hashjust add
method\u字段('put')更新当前经过身份验证的用户的密码
在表单中的
csrf\u field()
之后,您需要首先找到要更新密码的用户!我的意思是哪个用户正在更新他/她的密码!您可以使用:
$id=\Auth::user()->id$employee=User::find($id)
使用此选项,您可以获得想要更新其密码的用户,这是您想要的!将此代码置于
$employee->password=bcrypt($request->password)行上方让我知道这是否有效??!我认为这是多余的,因为我正在传递我正在更新的对象,我没有必要找到它。无论如何,谢谢,我已经解决了这个问题,只为更新控制器创建了一个新的控制器(它可以工作,但可能不是传统的)好的,谢谢你的回复!)