Задать вопрос
@alexsteadfast
I am noob

Почему при Logout вылетает Bad Request (#400)?

Ошибка, появилась после того, как переделал logout, заменив ссылку, картинкой.
Контроллер
public function actionLogout()
    {
		
        Yii::$app->user->logout();

        return $this->goHome();
    }

Форма
<div class="wrap">
    <?php
	$status = Yii::$app->user->identity->status; 
	$ava = Yii::$app->user->identity->ava;
	if($ava==''){$ava='/images/defaulte.jpg';}
    NavBar::begin([
        'brandLabel' => 'YII 2',
        'brandUrl' => 'https://github.com/yiisoft/yii2/tree/master/docs/guide-ru',
        'options' => [
            'class' => 'navbar-inverse navbar-fixed-top',
        ],
    ]);
    $menuItems = [
        ['label' => 'Главная', 'url' => ['/site/index']],
        ['label' => 'Обратная связь', 'url' => ['/site/contact']],
		
		
		
    ];
    if (Yii::$app->user->isGuest) {
        $menuItems[] = ['label' => 'Регистрация', 'url' => ['/site/signup']];
        $menuItems[] = ['label' => 'Авторизация', 'url' => ['/site/login']];
	}
    else {
		if($status == 'admin'){
		$menuItems[] = ['label' => 'Админка', 'url' => ['/site/admin']];
		}
		
		$menuItems[] = ['label' => 'Личный кабинет', 'url' => ['/site/account']];
        $menuItems[] = '<li>'
            . Html::beginForm(['/site/logout'], 'post')
			."<img class='profile_img' src='$baseUrl$ava'>"
			. '<div class="user_name">' .Yii::$app->user->identity->username .'</div>'
            . Html::submitButton(			       
                 "<img class='img_logout' src='$baseUrl/images/exit.png'>",
                ['class' => 'btn btn-link logout',
				 'style' => 'background-image:url('.$baseUrl .'/images/exit.png' .')']
            )		
            . Html::endForm()
            . '</li>';
		
		$menuItems[] = '<li>'
            . Html::beginForm(['/site/edit'], 'post')
            . Html::submitButton(			       
                 "<img class='img_edit' src='$baseUrl/images/edit_profile.png'>",
                ['class' => 'btn btn-link logout']
            )		
            . Html::endForm()
            . '</li>';
    }
    echo Nav::widget([
        'options' => ['class' => 'navbar-nav navbar-right'],
        'items' => $menuItems,
		
    ]);
    NavBar::end();
    ?>

Некоторое время всё работало нормально, потом стала вылетать ошибка при логауте и при переходе на редактирование профиля. На просторах рунета нашёл 2 ответа:
1) Нужно передавать токен.(Непонятно зачем его передавать при выходе их профиля)
2) Нужно Html::beginForm(['/site/logout'], 'post') писать в скобках квадратных, что у меня и было изначально.
Возможно есть другое объяснения этой ошибке?
  • Вопрос задан
  • 158 просмотров
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
slo_nik
@slo_nik Куратор тега Yii
Добрый вечер.
Непонятно, зачем Вы создали форму, это всё можно решить обычными ссылками. Ошибка может возникать из-за отсутствия CSRF token в форме. Если используете форму, то да, нужно токен передавать. Но это лишнее. Форма не нужна ради logout.
Ну и проверьте правила urlManager(), возможно в них проблема.
Так же можете очистить cookies и кэш.
И ещё, проверьте, есть ли у Вас в шаблоне такая строка <?= Html::csrfMetaTags() ?>
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы