【发布时间】:2020-12-10 17:51:45
【问题描述】:
我有登录表单,其中我正在实施集成 twilio API 的 2 因素身份验证。
API 工作正常,我可以获得成功或失败的验证响应。
现在我无法在表单上显示“OTP 验证失败”消息。
这是我的控制器代码:
公共函数 actionLogin() {
$this->layout = '@app/themes/backend/login';
$model = new LoginForm(['scenario' => 'login']);
if (Yii::$app->request->isAjax && $model->load($_POST)) {
$authy_id = Yii::$app->session->get('authy_id');
// var_dump($authy_id);exit;
Yii::$app->response->format = 'json';
// var_dump($model);exit;
if(!empty($authy_id)){
$authy_api = new AuthyApi('api-key');
$token_entered_by_user = $model->otp;
$verification = $authy_api->verifyToken($authy_id, $token_entered_by_user);
if ($verification->ok()) {
// correct token
// Yii::$app->response->format = 'json';
return \yii\bootstrap\ActiveForm::validate($model);
}else{
// Yii::$app->response->format = 'json';
$model->addError('OTP Verification Failed');
print_r('error');
Yii::$app->session->setFlash('error', "OTP verification failed!");
exit;
}
}else{
Yii::$app->response->format = 'json';
return \yii\bootstrap\ActiveForm::validate($model);
}
}
if ($model->load(Yii::$app->request->post()) && $model->login()) {
if (Yii::$app->user->identity->user_role == 'admin') {
$path = "../" . Yii::$app->user->identity->user_role;
return $this->redirect($path);
}
elseif(Yii::$app->user->identity->user_role == 'customer') {
$path = "../" . Yii::$app->user->identity->user_role .'/default/index';
return $this->redirect($path);
}
else{
$path = "../" . "site/index";
return $this->redirect($path);
...
}
}
return $this->render('login', [
'model' => $model,
]);
}
在我的视图文件中我尝试过:
<?php pjax::begin(['id'=>'otp-error']); ?>
<?php if(Yii::$app->session->hasFlash('error')):?>
<div class="info" id="otp-error">
<?= Yii::$app->session->getFlash('error') ?>
</div>
<?php endif?>
<?php pjax::end(); ?>
我在这里缺少什么?
【问题讨论】: