Есть модальное окно с двумя табами (регистрация и авторизация). Когда кликаю в меню "Войти", открывается модалка с активной вкладкой "Войти", уже заполненными полями e-mail и пароль (значения, вводимое ранее) и почти сразу происходит авторизация, закрытие модалки и переход на главную страницу, пользователь авторизован. Как решить эти проблемы? 1) при загрузки формы авторизации не должно быть автозапонления (autocomplete=off не помогает); 2) не должно быть авоматической авторизации, она должна быть только в результате нажатия кнопки "Войти".
В файле frontend/views/layouts/main.php
Код: Выделить всё
<div class="modal fade" id="modal" tabindex="-1">
<div class="modal-dialog">
<div class="modal-content">
</div>
</div>
</div>
Код: Выделить всё
<a href="<?=Url::to(['/user/auth','formtype'=>'signin'])?>" id="modal-signin-link" class="nav-link auth-link" data-toggle="modal" data-target="#modal">Войти</a>
Код: Выделить всё
.....
$formtype = Yii::$app->request->get('formtype');
?>
<div class="modal-header align-content-between">
<ul class="nav nav-tabs w-100 justify-content-between mr-auto ml-auto">
<li class="nav-item w-50" id="tab1"><a class="nav-link<?=(!isset($formtype) || $formtype == 'signin')?' active':''?>" data-toggle="tab" href="#signin">Войти</a></li>
<li class="nav-item w-50" id="tab2"><a class="nav-link<?=($formtype == 'signup')?' active':''?>" data-toggle="tab" href="#signup">Регистрация</a></li>
</ul>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true"><img src="/images/btn_close.svg" alt="Закрыть"></span>
</button>
</div>
<div class="modal-body">
<div class="tab-content">
<div class="alert alert-danger p-5" role="alert"></div>
<?= Alert::widget(); ?>
<div class="tab-pane fade show<?=(!isset($formtype) || $formtype == 'signin')?' active':''?>" id="signin">
<?php $form = ActiveForm::begin([
'id' => 'login-form',
'class' => 'auth-form',
'enableAjaxValidation' => true,
'enableClientValidation' => true,
'action' => ['user/ajax-signin']
]); ?>
<?= $form->field($modelsignin, 'email')
->textInput([
'autofocus' => true,
'placeholder'=>$modelsignin->getAttributeLabel('email')
])->label(false) ?>
<?= $form->field($modelsignin, 'password',
['errorOptions' => [
'encode' => false,
]])
->passwordInput([
'placeholder'=>$modelsignin->getAttributeLabel('password'),
'autocomplete'=>"off",
])->label(false) ?>
<?= $form->field($modelsignin, 'rememberMe')->checkbox() ?>
<div style="color:#999;margin:1em 0">
<?= Html::a('Забыли пароль', ['user/request-password-reset']) ?>
</div>
<div class="form-group">
<?= Html::submitButton('Войти', [
'id' => 'signin-button',
'class' => 'btn btn-blue btn-auth w-100 p-10',
'name' => 'login-button'
]) ?>
</div>
<?php ActiveForm::end(); ?>
</div>
<div class="tab-pane fade show<?=($formtype == 'signup')?' active':''?>" id="signup">
<?php $form = ActiveForm::begin([
'id' => 'signup-form',
'class' => 'auth-form',
'enableAjaxValidation' => true,
'enableClientValidation' => true,
'validationUrl' => \yii\helpers\Url::to(['validate-form']),
'action' => ['user/ajax-signup']
]); ?>
<?= $form->field($modelsignup, 'email')
->textInput([
'autofocus' => true,
'placeholder'=>$modelsignup->getAttributeLabel('email'),
])->label(false) ?>
<?= $form->field($modelsignup, 'password')
->passwordInput([
'placeholder'=>$modelsignup->getAttributeLabel('password'),
])->label(false) ?>
<?= $form->field($modelsignup, 'repassword')->passwordInput([
'placeholder'=>$modelsignup->getAttributeLabel('repassword'),
])->label(false) ?>
<?=$form->field($modelsignup, 'issubscribe')->checkbox(['checked'=>false])?>
<?=$form->field($modelsignup, 'agree')->checkbox(['checked'=>false])->label(\common\models\Config::getConfig(7))?>
<div class="form-group">
<?= $form->field($modelsignup, 'check')->hiddenInput([
'type' => 'hidden',
'id' => 'check',
'value' => '',
])->label(false) ?>
<?= Html::submitButton('Зарегистрироваться', [
'class' => 'btn btn-blue btn-auth w-100 pt-3 pb-3 mt-2',
'id' => 'signup-button',
'name' => 'signup-button',
'onclick'=>"document.getElementById('check').value = 'nospam';"
]) ?>
</div>
<?php ActiveForm::end(); ?>
</div>
</div>
</div>
Код: Выделить всё
public function actionAuth()
{
if (!Yii::$app->user->isGuest) {
return $this->goHome();
}
$modelsignin = new LoginForm();
$modelsignup = new SignupForm();
if ($model->load(Yii::$app->request->post()) && $model->login()) {
return $this->goBack();
} else {
return $this->renderAjax('auth', [
'modelsignin' => $modelsignin,
'modelsignup' => $modelsignup,
]);
}
}
public function actionAjaxSignin()
{
if (Yii::$app->request->isAjax) {
$model = new LoginForm();
if ($model->load(Yii::$app->request->post())) {
if ($model->login()) {
return $this->goBack();
} else {
Yii::$app->response->format = yii\web\Response::FORMAT_JSON;
return \yii\widgets\ActiveForm::validate($model);
}
}
} else {
throw new HttpException(404 ,'Страница не найдена');
}
}
Код: Выделить всё
$('#modal').on('show.bs.modal', function (event) {
var button = $(event.relatedTarget) ;
$(this)
.find('.modal-content')
.load(button.attr('href'));
});
$(document).on("submit", '#signup-form', function (e) {
e.preventDefault();
var form = $(this);
$.ajax({
url: form.attr('action'),
type: "POST",
data: form.serialize(),
success: function (result) {
var html = '<div id="success alert alert-success p-5"><strong>Спасибо за регистрацию на сайте. Для подтверждения регистрации перейдите, пожалуйста, по ссылке, которая отправлена на e-mail, указанный Вами при регистрации.</strong></div>';
$('.tab-content').html(html);
setTimeout(function() {
$("#modal").modal('hide');
}, 15000);
},
error: function (result) {
var html = '<div id="success alert alert-success p-5"><strong>В данный момент невозможно зарегистрироваться. Попробуйте, пожалуйста позднее или обратитесь к администратору сайта.</strong></div>';
$('.tab-content').html(html);
}
});
});