Yii2框架实现退出登录功能报错问题咨询
解决Yii退出登录时的CSRF验证错误问题
嘿,我看你这是碰到Yii框架的CSRF验证报错啦!这事儿我之前也踩过坑——Yii默认会对所有POST请求做CSRF校验,而你提交退出的表单里没带必要的验证令牌,所以才会触发报错。
给你几个靠谱的解决办法,按优先级选就行:
1. 直接在表单里加CSRF隐藏字段
这是最简单直接的方式,在你的form标签里加一行Yii自带的生成代码,表单提交时就会自动带上验证令牌:
<form action="/template/logout" method="POST"> <?php echo yii\helpers\Html::csrfInput(); ?> <input class="btn acc_exit" name="btn_logout" type="submit" value="logout" /> </form>
2. 用Yii的ActiveForm生成表单(适合有表单模型的场景)
如果你的页面本来就用了ActiveForm,那直接用它来生成退出表单更省心,它会自动帮你加上CSRF令牌:
<?php $form = yii\widgets\ActiveForm::begin([ 'action' => '/template/logout', 'method' => 'POST', ]); ?> <?= $form->field($model, 'btn_logout')->submitButton('logout', ['class' => 'btn acc_exit']) ?> <?php yii\widgets\ActiveForm::end(); ?>
3. 临时关闭该路由的CSRF验证(不推荐!)
要是你真的有特殊情况需要跳过这个接口的校验,也可以在控制器里配置,但这会降低安全性,不到万不得已别用:
public function behaviors() { $behaviors = parent::behaviors(); // 给logout动作关闭CSRF校验 $behaviors['csrfFilter']['actions']['logout'] = false; return $behaviors; }
对了,你的控制器代码本身没啥问题,只要表单带上CSRF令牌,点击logout按钮就能正常退出并跳转到登录页啦!
内容的提问来源于stack exchange,提问作者markdeitchell
相关产品推荐
相关产品推荐

