'Get Csrf token missmatch in laravel ajax post request

I am getting csrf token missmatch error while making ajax post request. I add meta tag for csrf token and setting up ajaxSetup. but it's not send the post request to the URL. it's says csrf token mismatch 419 error. My blade file code are given below

@extends('admin.master')

@section('cdn')

<meta name="csrf-token" content="{{ csrf_token() }}" />

@endsection

@section('admin')

<section class="content">

    <!-- Basic Forms -->
     <div class="box">
       <div class="box-header with-border">
         <h4 class="box-title">Change Password</h4>
       </div>
       <!-- /.box-header -->
       <div class="box-body">
         <div class="row">
           <div class="col">
               <form>
                 <div class="row">
                   <div class="col-12">     
                       <div class="row">
                           <div class="col-md-6">
                                <div class="form-group">
                                    <h5>Current Password</h5>
                                    <div class="controls">
                                    <input type="password" id="current_password" name="current_password" class="form-control" >
                                    <span class="text-danger" id="current_password_Error"></span>
                                    </div>
                                </div>

                                <div class="form-group">
                                  <h5>New Password</h5>
                                  <div class="controls">
                                  <input type="password" id="new_password" name="new_password" class="form-control" >
                                  <span class="text-danger" id="new_password_Error"></span>
                                  </div>
                              </div>

                              <div class="form-group">
                                <h5>Confirm Password</h5>
                                <div class="controls">
                                <input type="password" id="confirm_password" name="confirm_password" class="form-control" >
                                <span class="text-danger" id="confirm_password_Error"></span>
                                </div>
                            </div>

                           </div>

                           </div>
                   </div>
                </div>
            </div>
        </div>
    </div>
    <div class="text-xs-right">
        <button type="button" onclick="changePassword()" class="btn btn-rounded btn-primary md-5">Change Password</button>
    </div>
               </form>

           </div>
           <!-- /.col -->
         </div>
         <!-- /.row -->
       </div>
       <!-- /.box-body -->
     </div>
     <!-- /.box -->

   </section>
<script type="text/javascript">
   
     $.ajaxSetup({
        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        }
    });

   function changePassword(){
     let currentPassword = $('#current_password').val();
     let newPassword = $('#new_password').val();
     let confirmPassword = $('#confirm_password').val();

     $.ajax({
       type: "post",
       url: "/admin/update/password",
       data: {currentPassword: currentPassword, newPassword: newPassword, confirmPassword: confirmPassword},
       dataType: "JSON",
       success: function (response) {
         
       },
       error: function(err){
         console.log(err);
       }
     });
   }
</script>

@endsection

my controller code is given below

<?php


 class AdminProfileController extends Controller
 {
  //Password update

function updatePassword(Request $req){

   $fields = $req->validate([
        'currentPassword' => 'required|min:8|max:30',
        'newPassword' => 'required|min:8|max:30',
        'confirmPassword' => 'required|min:8|max:30|same:newPassword',
    ]);


    $hashedPassword = Admin::find(1)->password;

    if(Hash::check($fields['currentPassword'], $hashedPassword)){
        $data = Admin::find(1);
        $data->password = bcrypt($fields['newPassword']) ;
        $data->save();
        Auth::guard('admin')->logout();

        $response = [
            'status' => 201,
            'msg' => 'Password updated successfully',
            'redirect_uri' => route('admin.login')
        ];

        return response()->json($response);          
   }

}
}



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source