Estoy intentando actualizar la contraseña en Laravel, la contraseña se está actualizando, pero cuando intento iniciar sesión it shows wrong details, no estoy seguro de qué estoy haciendo mal aquí.

public function passwordupdate(Request $request, $id)
{
    $user = User::find($id);

    // Column updating with incorrect Hash
    $user->password = Hash::make($request->password);
    $user->setRememberToken(Str::random(60));
    $user->active = 0; // This value is updating correctly
    $user->save();

    return response()->json(['msg' => 'password updated']);
}

Como mencioné, mi solicitud estaba publicando un valor nulo, así que estoy agregando código Ajax para entender por qué.

Ajax

$('.update_password').on('click', function (e) {
    console.log('Update password clicked!')
    e.preventDefault();
    $.ajax({
        type: "POST",
        dataType: 'json',
        data: $(this).serialize(),
        url: "/users/" + $('#user_pwid').val(),
        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        },
        success: function (data) {
            if (data.msg) {
                $('#response').empty();
                $(".toast").toast('show');
                $('#response').append(data.msg);
            }
        }
    });
});

Ver / Blade

<form method="post" id="policy-form">
    @csrf
    <input type="hidden" value="">
    <select name="name" id="user_pwid" class="form-control user_pwid border border-secondary border-dark" required>
        <option selected value="">SELECT USER</option>
        @foreach($users as $user)
            <option value="{{$user->id}}"> {{$user->name}}</option>
        @endforeach
    </select>
    <input type="password" name="password" id="password">
    <button type="click" class="btn btn-danger btn-sm update_password rounded text-center" value="{{$user->id}}"
            id="update-password"></button>
</form>
0
Fayakon 5 dic. 2019 a las 08:27

2 respuestas

Prueba esto:

Código de controlador:

public function passwordupdate(Request $request,$id) {
    $user = User::find($id);
    if(!is_null($user)){
        $user->password = Hash::make($request->password);
        $user->setRememberToken(Str::random(60));
        $user->active =0;
        $user->save();   
        return response('success'); 
    }
    else{
        return response('failed'); 
    }
}

Código Ajax:

$('#update-password').on('click', function(e) {
    e.preventDefault();
    $.ajax({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content'),
    },
    type: "post",
    url: "/users/" + $('#user_pwid').val(),
    data :{
        password : $('#password').val(),

    },
    success: function (data) {
        if(data == 'success'){
            alert('password changed successfully');
            $('#response').empty();
            $(".toast").toast('show');
            $('#response').append(data);
        }
        else{
            alert('failed');
        }
    },
    });
});

Prueba esto, funcionará

1
Khalid Khan 5 dic. 2019 a las 06:26

¿$request->password tiene realmente la contraseña deseada? ¿Está seguro de que no ha escrito un mutador en el modelo que sea doble hashing la contraseña?

¿Hay una buena razón por la que está creando su propio controlador de restablecimiento de contraseña en lugar de usar el que viene con Laravel? Además, realmente no desea devolver la contraseña al usuario en JSON.

0
Dwight 5 dic. 2019 a las 05:30