要在larvel 5.5和dingo包中创建双因素SMS验证,我遵循此简化工作流程:
首先检查isTwoFactorActive在您的登录功能中是真还是假,如果它是真正的发送短信并给出响应以获得收到的短信代码。如果它的false直接返回令牌。
QWidget *mWidget = new QWidget(this);
QGridLayout *gLayout = new QGridLayout(mWidget);
for(int i = 0; i < 5; i++) {
MyButton *btn = new MyButton(mWidget);
gLayout->addWidget(btn, 0, i);
connect(btn, &MyButton::btnRightClicked, this, &MainWindow::onRightClicked);
mButtons << btn;
}
mWidget->setLayout(gLayout);
setCentralWidget(mWidget);
现在在前端检查令牌是否存在,然后继续显示主页或显示输入短信代码屏幕并在表单中捕获短信代码,然后再将详细信息发布到此API。
Route::post('auth/login', function () {
$credentials = Input::only('email', 'password');
if ( ! $token = JWTAuth::attempt($credentials) )
{
// return the 401 response
return Response::json(['error' => 'invalid_credentials'], 401);
}
if(Auth::user()->isTwoFactorActive) {
$code = rand(1000,9999); //generate sms code
$send_sms = SendSMS($code,Auth::user()->phone); //write your own code here to send SMS to user mobile
$data= collect(array('sms_code'=>$code,'token'=>$token)); // save sms_code and token in an array
Session::push(Auth::user()->id, $data); // save array into session.
return Response::json(array('login_status'=>'success','user_id'=>Auth::user()->id,'sms_required'=>'yes'));
} else {
return Response::json(array('login_status'=>'success','token'=>$token));
}
});
正如您所看到的,我使用会话来存储创建的令牌,以便在成功的双因素授权后发送它。但似乎我们不能在laravel和API中使用会话。
在这种情况下我该怎么办?
答案 0 :(得分:1)
Laravel API默认设置不包含会话。但我相信你可以手动添加它们。这是我很快找到的链接。 Laravel 5.3 - How to add Sessions to `API` without CSRF?
但Sessions和Middleware的Laravel文档也可能有用。