Как сделать форму изменения адреса электронной почты в профиле в Laravel - PullRequest
0 голосов
/ 28 мая 2020

Я успешно сменил пароль, но у меня возникли проблемы со сменой адреса электронной почты, что, я думаю, было бы проще, но почему-то не мог придумать, как это сделать.

Старый адрес электронной почты:

Новый адрес электронной почты:
Подтвердите новый адрес электронной почты:

Это форма, которую я хочу создать, но не могу решить функцию контроллеров.

Вот как я пытался его решить

public function changeemailPost(Request $request)
    {

        if (!(Hash::check($request->get('email'), Auth::user()->email))) {
            return redirect()->back()->with("error","Your current e-mail does not matches with the e-mail you provided. Please try again.");
        }

        if(strcmp($request->get('email'), $request->get('new-email')) == 0){
            return redirect()->back()->with("error","New e-mail cannot be same as your current e-mail. Please choose a different e-mail.");
        }

            $validate = $request->validate([
                'email' => 'required',
                'new-email' => 'required|string|min:6|confirmed',
            ]);
            $user = Auth::user();
            $user->email = $request['new-email'];
            $user->save();
            Auth::logout();
            return view('auth.login');
        }

Это html

<form method="POST" action="{{ route('change-emailPost') }}">
                            @csrf
                            <label>Enter your old e-mail:</label>

                            <fieldset class="youplay-input">
                                <input id="current-email" type="email" class="form-control" placeholder="Current E-Mail" name="email" required>
                            </fieldset>

                            <label>Enter your new e-mail:</label>

                            <fieldset class="youplay-input">
                                <input id="new-email" type="email" placeholder="New E-Mail" class="form-control" name="new-email" required>
                            </fieldset>

                            <fieldset class="youplay-input">
                                <input id="new-email-confirm" type="email" class="form-control" placeholder="Confirm New E-Mail" name="new-email-confirmation" required>
                            </fieldset>
                            <button type="submit" class="btn btn-default db">
                                Change E-Mail
                            </button>
                        </form>

Но я получаю только эта ошибка

Ваш текущий адрес электронной почты не совпадает с указанным вами. Повторите попытку.

Проблема была решена благодаря ответу ниже, но вы должны изменить одну вещь: Ha sh проверяет ошибки в электронной почте вместо:

if (!(Hash::check($request->get('email'), Auth::user()->email))) {
            return redirect()->back()->with("error","Your current e-mail does not matches with the e-mail you provided. Please try again.");
        }

        if(strcmp($request->get('email'), $request->get('new-email')) == 0){
            return redirect()->back()->with("error","New e-mail cannot be same as your current e-mail. Please choose a different e-mail.");
        }

Используйте это:

if(Auth::user()->email != $request['email']){
            return redirect()->back()->with("error","Your email doesnt not match with what you provided");
        }
        if(Auth::user()->email === $request['new-email']){
            return redirect()->back()->with("error", "Your new email cannot be the same as the old email");
        }

1 Ответ

2 голосов
/ 28 мая 2020

Вам необходимо изменить функцию changeemailPost . Попробуйте это -

public function changeemailPost(Request $request)
{

    if (!(Hash::check($request->get('email'), Auth::user()->email))) {
        return redirect()->back()->with("error","Your current e-mail does not matches with the e-mail you provided. Please try again.");
    }

    if(strcmp($request->get('email'), $request->get('new-email')) == 0){
        return redirect()->back()->with("error","New e-mail cannot be same as your current e-mail. Please choose a different e-mail.");
    }

        $validate = $request->validate([
            'new-email' => 'required|string|min:6|confirmed',
            'new-email_confirmation' => 'required|string|min:6',
        ]);
        $user = Auth::user();
        $user->email = $request['new-email'];
        $user->save();
        Auth::logout();
        return view('auth.login');
    }

И ваш HTML, как показано ниже -

<form method="POST" action="{{ route('change-emailPost') }}">
                        @csrf
                        <label>Enter your old e-mail:</label>

                        <fieldset class="youplay-input">
                            <input id="current-email" type="email" class="form-control" placeholder="Current E-Mail" name="email" required>
                        </fieldset>

                        <label>Enter your new e-mail:</label>

                        <fieldset class="youplay-input">
                            <input id="new-email" type="email" placeholder="New E-Mail" class="form-control" name="new-email" required>
                        </fieldset>

                        <fieldset class="youplay-input">
                            <input id="new-email-confirm" type="email" class="form-control" placeholder="Confirm New E-Mail" name="new-email_confirmation" required>
                        </fieldset>
                        <button type="submit" class="btn btn-default db">
                            Change E-Mail
                        </button>
                    </form>

Если вы хотите сравнить два поля ввода a & b со значением с confirmed правилами проверки b поле следует переименовать в b_confirmation.

Ссылка - https://laravel.com/docs/7.x/validation#rule -подтверждено

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