Задать вопрос
@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' => 'Новый пароль',
        ];
    }
}
  • Вопрос задан
  • 364 просмотра
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 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 для частичной.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы