我已经通过使用自定义身份验证创建了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 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">
我的身份验证控制器如下,
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'),如果一次密码错误,则应将其重定向到用户键入一次但有错误的同一页面。
问题是以下陈述:
return redirect()->back();
这会将用户重定向到仅适用于POST
请求但该语句使用GET
请求重定向的路由。
尝试使用此:
return redirect()->route('login');
BTW:您不能将login => false
作为Auth::routes()
的参数传递。可能的参数是:
Auth::routes([
'register' => false, // Registration Routes...
'reset' => false, // Password Reset Routes...
'verify' => false, // Email Verification Routes...
]);
您需要覆盖登录路由,然后将其重定向到家庭或其他地方。