【发布时间】:2020-04-24 17:41:07
【问题描述】:
我使用自定义身份验证创建了一个 laravel 应用程序。通过whych,用户可以单独使用手机号码登录。一旦他们输入手机号码并提交,他们将在手机上收到一次密码作为短信。在下一个屏幕上,他们应该输入一次性密码并登录。我已经成功实现了这个功能。
但我的问题是,当我验证一次密码时,如果密码正确,它会登录,如果密码错误,我会收到一条错误消息,指出 此路由不支持 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标签如下
<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);
}
}
请帮助我验证,如果一次性密码正确意味着它应该去路由('home'),如果一次性密码错误,那么它应该被重定向到用户输入一次性密码但使用的同一页面错误。
【问题讨论】:
-
登录表单在哪个页面?
-
你在哪条路线上遇到了这个错误?
-
laravel 默认登录路由包含登录表单
-
当我输入错误的一次性密码@BhargavChudasama 时,在 otp 路由上出现错误
-
登录表单在
/login?