【问题标题】:Laravel OTP with email onlyLaravel OTP 仅包含电子邮件
【发布时间】:2020-07-07 08:34:59
【问题描述】:

我正在尝试在 Laravel 7 应用程序中引入此身份验证流程:

  • 用户输入他们的电子邮件,提交表单。
  • 用户被发送到具有单个输入字段的表单;
  • 系统使用 10(或其他)数字代码向用户发送电子邮件;
  • 用户输入该代码并通过身份验证;

如果用户在稍后阶段尝试输入相同的电子邮件 - 代码也会发生同样的事情。没有密码什么的。

有什么方法可以实现开箱即用(或使用包)还是我应该自己编写?

【问题讨论】:

  • 您要通过电子邮件向用户发送带有输入字段的 form_template 吗?还是某些仅授权给特定用户的加密 URl?
  • 用户输入他的电子邮件后,他将被重定向到网站上的单个字段页面,他必须输入他在电子邮件中收到的 4 位数代码。
  • 这很简单,只需使用 user_id、otp 和 expiry_date 创建 user_otp 表,然后在提交表单时应用您的逻辑。

标签: laravel laravel-authentication laravel-7


【解决方案1】:

是的,有效的方法是继承 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 视图就可以了

【讨论】:

    猜你喜欢
    • 2021-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-29
    • 2016-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多