Как выполнить пользовательскую проверку подлинности в Laravel - PullRequest
0 голосов
/ 07 января 2020

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

Но моя проблема в том, что когда я проверяю одноразовый пароль, если он правильный, он входит в систему и если он неверный, я получаю сообщение об ошибке Метод GET не поддерживается для этого маршрута. Поддерживаемые методы: POST. , я не знаю, что вызывает эту ошибку, так как все маршруты только в POST.

Пожалуйста, дайте мне понять, если это неверный пароль, страницу следует перенаправить на той же странице с сообщением об ошибке «Одноразовый пароль не совпадает».

Мой маршрут:

Auth::routes(['login' => false]);

Route::get('/home', 'HomeController@index')->name('home');

Route::post('/otp', 'AuthController@showOtpForm')->name('otp');

Route::post('/loginsuccess', 'AuthController@loginsuccess')->name('loginsuccess');

И тег формы на Login.blade. php выглядит следующим образом

<form class="login-form" action="{{ route('otp') }}" method="post">

И тег формы и скрытое значение со страницы входа в систему на otp.blade. php выглядит следующим образом

<form class="login-form" method="POST" action="{{ route('loginsuccess') }}">

<input type="hidden" value="{{ $phone }}" name="phone">

А мой Auth Controller выглядит следующим образом:

 public function showOtpForm(Request $request)
    {
        try
        {
            $newotp =  mt_rand(100000, 999999);

            $user = User::where('phone', $request->phone)->firstOrFail();
            $user->otp = $newotp;
            $user->save();

            return view('auth.otp')->with('phone', $request->phone);
        }
        catch(ModelNotFoundException $e)
        {
            //dd(get_class_methods($e)); // lists all available methods for exception object
            echo "No user found, please register or try again later.";
        }

    }


    public function loginsuccess(Request $request)
    {
        try
        {
            $user = User::where('phone', $request->phone)->firstOrFail();
                if($user->otp === $request->otp)
                {
                    Auth::login($user);
                    return redirect()->route('home');
                }else{
                    return redirect()->back();
                }
        }
        catch(ModelNotFoundException $e)
        {
            dd($e);
        }
    }

Пожалуйста, помогите мне проверить, если правильный одноразовый пароль означает, что он должен go маршрутизировать ('home'), а если неправильный одноразовый пароль, его следует перенаправить на ту же страницу, на которой пользователи вводят одноразовый пароль. но с ошибкой.

1 Ответ

0 голосов
/ 07 января 2020

Проблема заключается в следующем утверждении:

return redirect()->back();

Это перенаправляет пользователя обратно на ваш маршрут otp. Вы определили, что маршрут доступен только с помощью запроса POST. Проблема заключается в том, что при перенаправлении используется запрос GET.

Так что вы можете подумать о перенаправлении пользователя на маршрут login, например return redirect()->route('login');, чтобы он снова вводил номер своего мобильного телефона (в конечном итоге быть немного более безопасным) или вы измените свой otp маршрут с GET на POST следующим образом:

Route::get('/otp', 'AuthController@showOtpForm')->name('otp');

Если вы измените POST на GET, вы также должны изменить метод в вашей форме в представлении входа в систему.


КСТАТИ: Вы не можете передать login => false в качестве параметра для Auth::routes(). Возможные параметры:

Auth::routes([
  'register' => false, // Registration Routes...
  'reset' => false, // Password Reset Routes...
  'verify' => false, // Email Verification Routes...
]);

Вам необходимо переопределить маршрут входа в систему и просто перенаправить его на дом или куда-то еще.

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