php - YII2 Active Form 显示自定义验证消息
问题描述
我有登录表单,其中我正在实现集成 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(); ?>
我在这里想念什么?
解决方案
去掉exit;
设置后的“OTP验证失败!” 信息。
在您设置了该闪存消息后,您将无处可去。
请记住,要使 Flash 消息起作用,您的代码必须到达您的视图。如果您之前返回或返回 JSON,它永远不会到达您的客户端。
推荐阅读
- scala - 如何使用 spark scala 在两个数据框中获取最新记录?
- reactjs - 无法在使用 Firestore 做出反应时删除多个项目
- reactjs - 收到 `value` 属性的 NaN。如果这是预期的,请将值转换为字符串
- mysql - MariaDB – 评估包含列名的变量
- sql - 查询是否记录在 SQL Server 事务日志中?
- python - 计算重复的值,即使是那些不存在的值
- php - SQL使用while循环将数据添加到1行
- openlayers - 如何在地图上显示此 geojson 数据
- c# - 在 GCP Compute Engine Instances API 中,SetMetadata 如何通知 VM 实例运行新添加的启动脚本?
- c# - 使用 .net core 进行内存泄漏测试