Laravel Текущая проверка пароля не работает в клиентской части - PullRequest
0 голосов
/ 03 марта 2020

Я использую JS Validator для проверки полей формы в Laravel

Ниже приведен мой код в usercontroller для проверки

class UserController extends Controller
{
    protected $changepassValidationRules = [
        'old_password' => 'required|pwdvalidation|min:6',
        'password' => 'required|min:6|confirmed',
    ];
}

Я передаю $changepassValidationRules для просмотра страница для проверки.

Ниже приведен мой код на странице просмотра

<div class="col-md-4 col-sm-6 col-xs-12">
    <div class="card">
        <form method="post" action="{{ url('user/changepassword') }}" name="useredit" id="changepass"
              enctype="multipart/form-data" novalidate>
            {{ csrf_field() }}
            @if (session('message_changepass'))
            <div class="alert alert-success">
                {{ session('message_changepass') }}
            </div>
            @endif
            <div class="card-header">
                <h4 class="card-title">
                    Change Password
                </h4>
            </div>

            <div class="card-content">
                <div class="form-group {{ $errors->has('old_password') ? ' has-error' : '' }}">
                    <label class="control-label">Old Password
                        <star> *</star>
                    </label>
                    <input type="password" placeholder="Password" class="form-control" id="old_password"
                           name="old_password">
                    @if ($errors->has('old_password'))
                    <span class="help-block error-help-block">
                                    {{ $errors->first('old_password') }}
                                </span>
                    @endif
                </div>
                <div class="form-group {{ $errors->has('password') ? ' has-error' : '' }}">
                    <label class="control-label">New Password
                        <star> *</star>
                    </label>
                    <input type="password" placeholder="Password" class="form-control" id="password" name="password">
                    @if ($errors->has('password'))
                    <span class="help-block">
                                    {{ $errors->first('password') }}
                                </span>
                    @endif
                </div>

                <div class="form-group">
                    <label class="control-label">Confirm Password
                        <star> *</star>
                    </label>
                    <input id="password-confirm" type="password" class="form-control" name="password_confirmation"
                           placeholder="Confirm Password">
                </div>
                <div class="form-action">
                    <button type="submit" class="btn btn-fill btn-info">Submit</button>
                </div>
            </div>
        </form>
    </div>

Все остальные правила проверки работают отлично, но проблема в том, что я хочу проверить текущий пароль уже в БД.

если пользователь вводит неверный пароль, то должна появиться ошибка, в чем проблема

Ответы [ 2 ]

0 голосов
/ 03 марта 2020

Вы можете инициировать запрос ajax на размытие текущего пароля и писать код в контроллере, чтобы соответствовать текущему введенному паролю, правильный или нет, если нет, тогда верните false и он придет в функцию обратного вызова ошибки, откуда вы можете показать ошибку.

$("$crntPwd").on("blur",function(){
$.ajax({
url:'your url',
method: 'get/post',
data : {current pwd's value},
success:function(response){
console.log(response);
},
error:function(error){
console.log(error or "your current password is incorrect");
}
});
});
0 голосов
/ 03 марта 2020

Вы можете использовать Правило проверки обычая для создания своей собственной проверки прав доступа

1. Я создам правило MatchCurrentPassword

php artisan make:rule MatchCurrentPassword

2.В коде правила

<?php

namespace App\Rules;

use Illuminate\Contracts\Validation\Rule;
use Illuminate\Support\Facades\Hash;

class MatchCurrentPassword implements Rule
{
    /**
     * Determine if the validation rule passes.
     *
     * @param  string  $attribute
     * @param  mixed  $value
     * @return bool
     */
    public function passes($attribute, $value)
    {
        return Hash::check($value, auth()->user()->password);
    }

    /**
     * Get the validation error message.
     *
     * @return string
     */
    public function message()
    {
        return ':attribute is not match';
    }
}

в вашем UserController
use App\Rules\MatchCurrentPassword;

class UserController extends Controller
{
    public function changePassword(Request $request) {
        $request->validate([
            'old_password' => ['required', 'min:6', new MatchCurrentPassword],
            'password' => 'required|min:6|confirmed',
        ]);

        // you logic code 
    }
}

вы также можете переместить запрос в форму запроса Проверка запроса формы

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...