change password user laravel 5.3

前端 未结 5 1413
终归单人心
终归单人心 2021-01-30 11:00

I want to create form with 3 field (old_password, new_password, confirm_password) with laravel 5.

View

old password : {!! Form::password(

相关标签:
5条回答
  • 2021-01-30 11:37

    I am explain here another method to change user password changepassword.blade.php

    @extends('layouts.app')
    
    @section('content')
    <div class="container">
        <div class="row">
            <div class="col-md-8 col-md-offset-2">
                <div class="panel panel-default">
                    <div class="panel-heading">Change password</div>
    
                    <div class="panel-body">
                        @if (session('error'))
                            <div class="alert alert-danger">
                                {{ session('error') }}
                            </div>
                        @endif
                            @if (session('success'))
                                <div class="alert alert-success">
                                    {{ session('success') }}
                                </div>
                            @endif
                        <form class="form-horizontal" method="POST" action="{{ route('changePassword') }}">
                            {{ csrf_field() }}
    
                            <div class="form-group{{ $errors->has('current-password') ? ' has-error' : '' }}">
                                <label for="new-password" class="col-md-4 control-label">Current Password</label>
    
                                <div class="col-md-6">
                                    <input id="current-password" type="password" class="form-control" name="current-password" required>
    
                                    @if ($errors->has('current-password'))
                                        <span class="help-block">
                                            <strong>{{ $errors->first('current-password') }}</strong>
                                        </span>
                                    @endif
                                </div>
                            </div>
    
                            <div class="form-group{{ $errors->has('new-password') ? ' has-error' : '' }}">
                                <label for="new-password" class="col-md-4 control-label">New Password</label>
    
                                <div class="col-md-6">
                                    <input id="new-password" type="password" class="form-control" name="new-password" required>
    
                                    @if ($errors->has('new-password'))
                                        <span class="help-block">
                                            <strong>{{ $errors->first('new-password') }}</strong>
                                        </span>
                                    @endif
                                </div>
                            </div>
    
                            <div class="form-group">
                                <label for="new-password-confirm" class="col-md-4 control-label">Confirm New Password</label>
    
                                <div class="col-md-6">
                                    <input id="new-password-confirm" type="password" class="form-control" name="new-password_confirmation" required>
                                </div>
                            </div>
    
                            <div class="form-group">
                                <div class="col-md-6 col-md-offset-4">
                                    <button type="submit" class="btn btn-primary">
                                        Change Password
                                    </button>
                                </div>
                            </div>
                        </form>
                    </div>
                </div>
            </div>
        </div>
    </div>
    @endsection
    

    This is route in web.php

    Route::post('/changePassword','HomeController@changePassword')->name('changePassword');
    

    Controller Method

    public function changePassword(Request $request){
    
            if (!(Hash::check($request->get('current-password'), Auth::user()->password))) {
                // The passwords matches
                return redirect()->back()->with("error","Your current password does not matches with the password you provided. Please try again.");
            }
    
            if(strcmp($request->get('current-password'), $request->get('new-password')) == 0){
                //Current password and new password are same
                return redirect()->back()->with("error","New Password cannot be same as your current password. Please choose a different password.");
            }
    
            $validatedData = $request->validate([
                'current-password' => 'required',
                'new-password' => 'required|string|min:6|confirmed',
            ]);
    
            //Change Password
            $user = Auth::user();
            $user->password = bcrypt($request->get('new-password'));
            $user->save();
    
            return redirect()->back()->with("success","Password changed successfully !");
    
        }
    

    i have follow that link :- https://www.5balloons.info/setting-up-change-password-with-laravel-authentication/

    0 讨论(0)
  • 2021-01-30 11:38

    This is change password form

    <form id="form-change-password" role="form" method="POST" action="{{ url('/user/credentials') }}" novalidate class="form-horizontal">
      <div class="col-md-9">             
        <label for="current-password" class="col-sm-4 control-label">Current Password</label>
        <div class="col-sm-8">
          <div class="form-group">
            <input type="hidden" name="_token" value="{{ csrf_token() }}"> 
            <input type="password" class="form-control" id="current-password" name="current-password" placeholder="Password">
          </div>
        </div>
        <label for="password" class="col-sm-4 control-label">New Password</label>
        <div class="col-sm-8">
          <div class="form-group">
            <input type="password" class="form-control" id="password" name="password" placeholder="Password">
          </div>
        </div>
        <label for="password_confirmation" class="col-sm-4 control-label">Re-enter Password</label>
        <div class="col-sm-8">
          <div class="form-group">
            <input type="password" class="form-control" id="password_confirmation" name="password_confirmation" placeholder="Re-enter Password">
          </div>
        </div>
      </div>
      <div class="form-group">
        <div class="col-sm-offset-5 col-sm-6">
          <button type="submit" class="btn btn-danger">Submit</button>
        </div>
      </div>
    </form>
    

    Create rules

    public function admin_credential_rules(array $data)
    {
      $messages = [
        'current-password.required' => 'Please enter current password',
        'password.required' => 'Please enter password',
      ];
    
      $validator = Validator::make($data, [
        'current-password' => 'required',
        'password' => 'required|same:password',
        'password_confirmation' => 'required|same:password',     
      ], $messages);
    
      return $validator;
    }  
    

    User controller method to changes password

    use Validator;

    public function postCredentials(Request $request)
    {
      if(Auth::Check())
      {
        $request_data = $request->All();
        $validator = $this->admin_credential_rules($request_data);
        if($validator->fails())
        {
          return response()->json(array('error' => $validator->getMessageBag()->toArray()), 400);
        }
        else
        {  
          $current_password = Auth::User()->password;           
          if(Hash::check($request_data['current-password'], $current_password))
          {           
            $user_id = Auth::User()->id;                       
            $obj_user = User::find($user_id);
            $obj_user->password = Hash::make($request_data['password']);
            $obj_user->save(); 
            return "ok";
          }
          else
          {           
            $error = array('current-password' => 'Please enter correct current password');
            return response()->json(array('error' => $error), 400);   
          }
        }        
      }
      else
      {
        return redirect()->to('/');
      }    
    }
    
    0 讨论(0)
  • 2021-01-30 11:48

    changePassword.blade.php

    @extends('layouts.app')
    
    @section('content')
        <!-- header logo: style can be found in header.less -->
        <header class="header">
            <div class="container">
                <div class="row">
                    <div class="col-lg-6">
                    <a href="index.php" class="logo">
                        <!-- Add the class icon to your logo image or logo icon to add the margining -->
                        <img src="img/airbus-logo.png" />
                    </a></div>
                    <!-- Header Navbar: style can be found in header.less -->
                    <div class="col-lg-6">
                        @include('partials._userModal')
                        @include('partials._menu')
                    </div>
                </div>
            </div>
        </header>
        <div class="wrapper">
            <div class="container">
                <!-- Right side column. Contains the navbar and content of the page -->
                <aside class="content files-list clearfix">
                    <h2>
                    @if(Auth::check())
                    Welcome {{ Auth::user()->fullName }}
                    @endif
                    </h2>
                        <div class="col-xs-5">
                            <h4>Change password</h4><br />
                            @if($errors->any())
                                @foreach($errors->all() as $error)
                                    <p style='padding:15px;' class='bg-danger'>{{ $error }}</p>
                                @endforeach
                            @endif
                            @if(Request::get('errorMessage') !== null)
                                <p style='padding:15px;' class='bg-danger'>{{ Request::get('errorMessage') }}</p>
                            @endif
                            <form method="post">
                                {{ csrf_field() }}
                               <div class="placeholder">Current Password</div>
                                <input style="max-width:200px;" placeholder='Current password' name="oldpass" id="oldpass"  class="form-control" type="password"><br>
                                <div class="placeholder">New password</div>
                                <input style="max-width:200px;" placeholder='New password' name="password" id="password"  class="form-control" type="password"><br>
                                <div class="placeholder">Confirm password</div>
                                <input id="password_confirmation" style="max-width:200px;" placeholder='Confirm password' name="password_confirmation"  class="form-control" type="password">
                                <hr>
                                <input type="submit" class="btn btn-primary" value="Save">
                            </form>    
                        </div>
                </aside>
                <!-- /.right-side -->
            </div>
            <div style="  height: 155px;"></div>
            <div id="footer">
                <div class="container"> © Airbus Group 2015 </div>
            </div>
        </div>
        <!-- ./wrapper -->
        <!-- <script src="js/hub/demo.js" type="text/javascript"></script> -->
    <script type="text/javascript">
        $(document).ready(function(){
            var bHeight = $("body").height();
            var wHeight = $( window ).height();
            if(bHeight < wHeight){
                $("#footer").addClass("absolute");
            }else{
                $("#footer").removeClass("absolute");
            }
            if (!$.support.htmlSerialize && !$.support.opacity){
                $(".placeholder").show();
            }
        });
    </script>
    @endsection
    

    Controller Post Function

    public function postChangePassword(Request $request)
        {
            $validatedData = $request->validate([
                'oldpass' => 'required|min:6',
                'password' => 'required|string|min:6',
                'password_confirmation' => 'required|same:password',
            ],[
                'oldpass.required' => 'Old password is required',
                'oldpass.min' => 'Old password needs to have at least 6 characters',
                'password.required' => 'Password is required',
                'password.min' => 'Password needs to have at least 6 characters',
                'password_confirmation.required' => 'Passwords do not match'
            ]);
    
            $current_password = \Auth::User()->password;           
            if(\Hash::check($request->input('oldpass'), $current_password))
            {          
              $user_id = \Auth::User()->id;                       
              $obj_user = User::find($user_id);
              $obj_user->password = \Hash::make($request->input('password'));
              $obj_user->save(); 
              return view('auth.passwords.changeConfirmation');
            }
            else
            {           
              $data['errorMessage'] = 'Please enter correct current password';
              return redirect()->route('user.getChangePassword', $data);
            }  
        }
    
    0 讨论(0)
  • 2021-01-30 11:49

    Laravel 6 Check Old Password and Updating a New Password

    public function updatePassword(Request $request)
        {
            $this->validate($request, [
                'old_password'     => 'required',
                'new_password'     => 'required|min:6',
                'confirm_password' => 'required|same:new_password',
            ]);
    
            $data = $request->all();
    
            if(!\Hash::check($data['old_password'], auth()->user()->password)){
    
                 return back()->with('error','You have entered wrong password');
    
            }else{
    
               here you will write password update code
    
            }
        }
    
    0 讨论(0)
  • 2021-01-30 11:52

    This is how I do this with Laravel 5.8:

    View

    Confirm password must be something like this:

    {!! Form::password('password_confirmation', ['class' => 'form-control'']) !!}
    

    Because Laravel provides out the box a field confirmed rule.

    Create a form request and put this inside the rules part:

    use App\Rules\IsCurrentPassword;
    
    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'old_password' => ['required', new IsCurrentPassword],
            'password' => 'required|string|min:6|confirmed',
        ];
    }
    

    Let's use artisan to generate a rule that verifies if old_password is the real current password:

    php artisan make:rule IsCurrentPassword
    

    And put this inside the passes method of rule generated:

    /**
     * Determine if the validation rule passes.
     *
     * @param  string  $attribute
     * @param  mixed  $value
     * @return bool
     */
    public function passes($attribute, $value)
    {
        $current_password = auth()->user()->password;
        return Hash::check($value, $current_password);
    }
    

    Do not forget to import Hash:

    use Illuminate\Support\Facades\Hash;
    

    Controller

    All you need to do in your controller is this:

    auth()->user()->update([
        'password' => Hash::make($request->password)
    ]);
    

    And tada :) Hope I help.

    0 讨论(0)
提交回复
热议问题