I'm trying to use Laravel 8 to reset the password but its not working. I can send the email link, go to the form to input the new password and confirm it. After that I manage to log in but when I log out and try to enter with the same user with the new password I can't but with the old one it logs in.
Gonna post what I think its the relevant code
ResetPasswordController (haven't changed it)
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Auth\ResetsPasswords;
class ResetPasswordController extends Controller
{
use ResetsPasswords;
protected $redirectTo = RouteServiceProvider::HOME;
}
ResetsPassword.php Also haven't chaged it
<?php
namespace Illuminate\Foundation\Auth;
use Illuminate\Auth\Events\PasswordReset;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Password;
use Illuminate\Support\Str;
use Illuminate\Validation\Rules;
use Illuminate\Validation\ValidationException;
trait ResetsPasswords
{
use RedirectsUsers;
public function showResetForm(Request $request)
{
$token = $request->route()->parameter('token');
return view('auth.passwords.reset')->with(
['token' => $token, 'email' => $request->email]
);
}
public function reset(Request $request)
{
$request->validate($this->rules(), $this->validationErrorMessages());
$response = $this->broker()->reset(
$this->credentials($request), function ($user, $password) {
$this->resetPassword($user, $password);
}
);
return $response == Password::PASSWORD_RESET
? $this->sendResetResponse($request, $response)
: $this->sendResetFailedResponse($request, $response);
}
protected function rules()
{
return [
'token' => 'required',
'email' => 'required|email',
'password' => ['required', 'confirmed', Rules\Password::defaults()],
];
}
protected function validationErrorMessages()
{
return [];
}
protected function credentials(Request $request)
{
return $request->only(
'email', 'password', 'password_confirmation', 'token'
);
}
protected function resetPassword($user, $password)
{
$this->setUserPassword($user, $password);
$user->setRememberToken(Str::random(60));
$user->save();
event(new PasswordReset($user));
$this->guard()->login($user);
}
protected function setUserPassword($user, $password)
{
$user->password = Hash::make($password);
}
protected function sendResetResponse(Request $request, $response)
{
if ($request->wantsJson()) {
return new JsonResponse(['message' => trans($response)], 200);
}
return redirect($this->redirectPath())
->with('status', trans($response));
}
protected function sendResetFailedResponse(Request $request, $response)
{
if ($request->wantsJson()) {
throw ValidationException::withMessages([
'email' => [trans($response)],
]);
}
return redirect()->back()
->withInput($request->only('email'))
->withErrors(['email' => trans($response)]);
}
public function broker()
{
return Password::broker();
}
protected function guard()
{
return Auth::guard();
}
}
Also in ResetPassword Visual Studio shows me this lines with errors because I havent changed the file.
protected function resetPassword($user, $password)
{
$this->setUserPassword($user, $password);
$user->setRememberToken(Str::random(60));
$user->save();
event(new PasswordReset($user));
$this->guard()->login($user);
}
it says setRememberToken and Save methods are undefined and in the last line of the function the
#user
variable gives me this error.
Expected type 'Illuminate\Contracts\Auth\Authenticatable'. Found 'Illuminate\Contracts\Auth\CanResetPassword'.intelephense(1006)
Gonna share my database model and the users model file in Laravel, I use a custom users table.
Database model
https://i.stack.imgur.com/0s5DH.png[
^]
User model file
<?php
namespace App\Models;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Illuminate\Database\Eloquent\Model;
class User extends Authenticatable
{
use HasFactory, Notifiable;
protected $fillable = [
'role',
'name',
'surname',
'nick',
'email',
'password',
'image',
'idPersona',
'estado'
];
public function Persona(){
return $this->belongsTo(Persona::class,'idPersona');
}
protected $hidden = [
'remember_token'
];
protected $casts = [
'email_verified_at' => 'datetime',
];
}
Any help will be appreciated, I don't get any error so its hard to me to figure out was wrong.
What I have tried:
Well not tried much because I don't get a visible error and I'm new in Laravel so don't know what is wrong. If you need any extra relevant info I can gladly give it, English is not my main language so sorry for any mistake.