首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >非YII2页面上的YII2 post注销链接

非YII2页面上的YII2 post注销链接
EN

Stack Overflow用户
提问于 2019-11-14 00:49:31
回答 2查看 197关注 0票数 0

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

代码语言:javascript
复制
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']
                ],
            ],
        ],
    ],
]);

我试过Javascript。这是最新的。

代码语言:javascript
复制
 window.onload=function() {
   document.getElementById("logout").onclick=function() {
     var myForm = document.createElement("form");
     myForm.action='http://151.236.49.237/~aceify1/booking/site/logout';// the href of the link
     myForm.target="myFrame";
     myForm.method="POST";
     document.body.appendChild(myForm);
     myForm.submit();
     return false; // cancel the actual link
   }
 }

但它只是在YII2注销网址上显示内部服务器错误。

任何想法都将不胜感激。

EN

回答 2

Stack Overflow用户

发布于 2019-11-14 22:43:35

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

代码语言:javascript
复制
public function beforeAction($action)
{            
    if ($action->id == 'logout') {
         $this->enableCsrfValidation = false;
    }

    return parent::beforeAction($action);
}
票数 0
EN

Stack Overflow用户

发布于 2019-11-16 21:30:25

您只需将其转换为不带data-method='POST'的简单链接

并删除下面一行形式的SiteControllerbehaviors函数

代码语言:javascript
复制
'logout' => ['post'],
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58841854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档