非YII2页面上的YII2注销后链接

非YII2页面上的YII2注销后链接,yii2,Yii2,我已经创建了一个YII2站点,我想允许用户注销,而不是在YII2文件夹的页面上。在YII2中,我使用的是nav组件,因此布局的注销部分如下所示 echo Nav::widget([ 'options' => ['class' => 'navbar-nav navbar-right player-page'], 'encodeLabels' => false, 'items' => [ [ 'label' =&

我已经创建了一个YII2站点,我想允许用户注销,而不是在YII2文件夹的页面上。在YII2中,我使用的是nav组件,因此布局的注销部分如下所示

echo Nav::widget([
    'options' => ['class' => 'navbar-nav navbar-right player-page'],
    'encodeLabels' => false,
    'items' => [
        [
            'label' => 'Logout',
            'items' => [
                [
                    'label' => 'Sign out (' . Yii::$app->user->identity->username . ')',
                    'url' => ['/site/logout'],
                    'template' => '<a href="{url}" data-method="post">{label}</a>',
                    'linkOptions' => ['data-method' => 'post']
                ],
            ],
        ],
    ],
]);
但它只是在YII2注销URL上显示内部服务器错误


任何想法都将不胜感激。

您可以禁用注销功能的CSRF验证检查。将其添加到控制器中,或根据需要修改已存在的beforeAction()

public function beforeAction($action)
{            
    if ($action->id == 'logout') {
         $this->enableCsrfValidation = false;
    }

    return parent::beforeAction($action);
}

您只需将其转换为简单链接,而无需data method='POST'

并删除站点控制器的行下形式行为功能

'logout' => ['post'],

检查调试工具栏、app.log或apache的error.log是否存在实际错误可能是个好主意。\u csrf令牌必须与POST请求一起发送。错误代码是什么?您想从其他URL从站点注销吗?比如你的域名是domain.com,你想用example.com中的url注销?Michal-我检查了错误日志,发现有一个错误,但它没有用。我猜最重要的部分是“异常‘yii\web\BadRequestHttpException’,消息是‘无法验证您提交的数据’”,这可能与Manu所说的有关。ttrasn-它来自同一个域,因此yii类似于domain.com/subsite,我希望logoug链接的页面位于根域中。我将创建一个YII2页面,其中只有一个注销链接和iframe/embed链接。感谢您的输入,如果任何人有任何比iframe更流畅的想法,我很乐意听到。如果消息类似“无法验证您提交的数据”。那么需要禁用CSRF验证…或在一些操作中,如logoutAction write$this->enableCsrfValidation=false;谢谢你。最后,我做了我在上一篇评论中提到的事情,创建了一个只包含链接的页面,并对其进行了框架设计,通过一些设计调整,效果很好。
'logout' => ['post'],