我试图在 Laravel 7 应用程序中引入这种身份验证流程:
- 用户输入他们的电子邮件,提交表单。
- 用户被发送到具有单个输入字段的表单;
- 系统使用 10(或其他)数字代码向用户发送电子邮件;
- 用户输入该代码并通过身份验证;
如果在稍后阶段用户尝试输入相同的电子邮件 -新代码也会发生同样的事情。没有密码什么的。
有什么方法可以实现开箱即用(或使用包)还是我应该自己写?
我试图在 Laravel 7 应用程序中引入这种身份验证流程:
如果在稍后阶段用户尝试输入相同的电子邮件 -新代码也会发生同样的事情。没有密码什么的。
有什么方法可以实现开箱即用(或使用包)还是我应该自己写?
是的,有效的方法是继承 laravel auth 方法并相应地更改它们。使用任何名称 ex- UserController 创建一个资源控制器并编写此代码-
public $successStatus = 200;
public function login(Request $request){
Log::info($request);
if(Auth::attempt(['email' => request('email'), 'password' => request('password')])){
return view('home');
}
else{
return Redirect::back ();
}
}
public function loginWithOtp(Request $request){
Log::info($request);
$user = User::where([['email','=',request('email')],['otp','=',request('otp')]])->first();
if( $user){
Auth::login($user, true);
User::where('email','=',$request->email)->update(['otp' => null]);
return view('home');
}
else{
return Redirect::back ();
}
}
public function sendOtp(Request $request){
$otp = rand(1000,9999);
Log::info("otp = ".$otp);
$user = User::where('email','=',$request->email)->update(['otp' => $otp]);
// send otp to email using email api
return response()->json([$user],200);
}
然后将这些路由添加到您的路由文件中——
Route::post('login', 'UserController@login')->name('newlogin');
Route::post('loginWithOtp', 'UserController@loginWithOtp')->name('loginWithOtp');
Route::get('loginWithOtp', function () {
return view('auth/OtpLogin');
})->name('loginWithOtp');
Route::any('sendOtp', 'UserController@sendOtp');
然后添加 OtpLogin.blade.php 视图就可以了