@OlegSedoy

Как обновить пароль пользователя?

Все работает, пароль меняется, но войти с новым паролем не могу. Никак не могу понять в чем проблема, просто ни вижу в упор ее.

Маршрут
Route::get('/changePassword','PasswordController@show')->name('dashboard.password.show');
        Route::put('/changePassword','PasswordController@change')->name('dashboard.password.change');


Шаблон
@extends('dashboard.base')

@section('content')

    @if(Session::has('status'))
        <div class="alert alert-success text-dark">
            {{ Session::get('status') }}
        </div>
    @endif

    <div class="d-flex flex-row justify-content-between align-items-center mb-5">
        <h1>Раздел: Сменить пароль</h1>
    </div>

    <form action="{{ route('dashboard.password.change') }}" method="POST">
        @csrf
        @method('PUT')

        <div class="form-group">
            <label for="current-password">Текущий пароль</label>
            <input class="form-control @error('current-password') is-invalid @enderror" type="password"
                   name="current-password">
            @error('current-password')
            <p class="text-danger">{{ $message }}</p>
            @enderror
        </div>

        <div class="form-group">
            <label for="new-password">Новый пароль</label>
            <input class="form-control @error('new-password') is-invalid @enderror" type="password" name="new-password">
            @error('new-password')
            <p class="text-danger">{{ $message }}</p>
            @enderror
        </div>

        <div class="form-group">
            <label for="new-password_confirmation">Подтверждение</label>
            <input class="form-control @error('new-password_confirmation') is-invalid @enderror" type="password" name="new-password_confirmation">
            @error('new-password_confirmation')
            <p class="text-danger">{{ $message }}</p>
            @enderror
        </div>

        <button type="submit" class="btn btn-primary mt-3">Обновить пароль</button>

    </form>

@endsection


Контроллер
<?php

namespace App\Http\Controllers\Dashboard;

use App\Http\Controllers\Controller;
use App\Http\Requests\ChangePasswordRequest;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;

class PasswordController extends Controller
{
    protected $user;

    public function __construct()
    {
        $this->middleware(function ($request, $next){
            $this->user = Auth::user();
            return $next($request);
        });
    }

    public function show()
    {
        return view('dashboard.password.index');
    }

    public function change(ChangePasswordRequest $request)
    {

        if (!(Hash::check($request->input('current-password'), $this->user->password))) {
            return back()->withStatus('Неверный пароль');
        }

        if(strcmp($request->input('current-password'), $request->input('new-password')) == 0){
            return back()->withStatus('Текущий пароль совпадает с новым. Придумайте новый пароль');
        }

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

        Auth::logout();

        return redirect()->route('about')->withComplete('Пароль успешно изменен');

    }
}


Request

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class ChangePasswordRequest extends FormRequest
{

    public function authorize()
    {
        return true;
    }

    public function rules()
    {
        return [
            'current-password' => 'required',
            'new-password' => 'required|min:6|confirmed',
        ];
    }

    public function messages()
    {
        return [
            'current-password.required' => 'Поле :attribute обязательно для заполнения',
            'new-password.required' => 'Поле :attribute обязательно для заполнения',
            'new-password.min' => 'Для поля :attribute минимум 6 символов',
            'new-password.confirmed' => 'Подтвердите новый пароль',
        ];
    }

    public function attributes()
    {
        return [
            'current-password' => 'Текущий пароль',
            'new-password' => 'Новый пароль',
        ];
    }
}
  • Вопрос задан
  • 311 просмотров
Пригласить эксперта
Ответы на вопрос 3
@jazzus
Попробуй заменить это
$this->user->update([
            'password' => Hash::make($request->input('new-password'))
        ]);

на
$user = Auth::user();
$user->password = Hash::make($request->input('new-password'));
$user->save();

и убрать непонятную мидлварю из конструктора, которая ничего не делает, убрать юзера из свойств контроллера, заменить проверки из контроллера на правила валидации password, required_with и different. Вообще ,такие "непонятные" проблемы потому что тесты не пишутся. Тесты быстро покажут что и где + удобно дебажить процесс, а не тыкать формы и лазить по базам. Рекомендую писать перед разработкой.
Ответ написан
Комментировать
А что у тебя в базу попадает при обновлении? Ты пароль шифруешь?
Ответ написан
@Sqweez
FullStack Laravel / VueJS Developer
Попробуй сменить метод HTTP-запроса на PATCH, вместо PUT.
PUT используется для обновления всего ресурса, PATCH для частичной.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы