Php Yii Login使用权限模块时所需的方法出现故障

Php Yii Login使用权限模块时所需的方法出现故障,php,yii,Php,Yii,当用户尝试使用ajax调用查询数据库并且会话已过期时,我尝试将重定向到登录页面,所有这些都是在使用权限模块时发生的 我在所有项目中搜索了403和loginRequired,并将die函数放在已找到文本的位置,但我找不到执行路径,以查看loginRequired未触发的原因 我正在使用gridView和filter对一些数据进行排序,而会话已过期 我收到一个错误403:需要登录 有人知道在这种情况下如何重定向用户吗?试试这个提示 首先,将其添加到您的配置中: ... 'components

当用户尝试使用
ajax
调用查询数据库并且
会话已过期时,我尝试将
重定向到
登录
页面,所有这些都是在使用
权限
模块时发生的

我在所有项目中搜索了
403
loginRequired
,并将
die
函数放在已找到文本的位置,但我找不到执行路径,以查看
loginRequired
未触发的原因

我正在使用
gridView
filter
对一些数据进行排序,而
会话
已过期

我收到一个
错误403:需要登录

有人知道在这种情况下如何重定向用户吗?

试试这个提示

首先,将其添加到您的配置中:

    ...
'components'=>array(
    'user'=>array(          
        ...
        'loginRequiredAjaxResponse' => 'YII_LOGIN_REQUIRED',
        ...
    ),
    ...
然后在视图(布局)中添加:

所以,您可以看到,如果我们的请求不是ajax,我们只需重定向到登录url,否则,如果在用户组件配置集
loginRequiredAjaxResponse
中,我们会回显它并结束应用程序。 如果两个if都失败,则调用登录所需的异常。我想您的响应中包含此消息,并且呈现了错误页面

如果使用自定义用户类并重写
loginRequired()
函数,则可能会出现另一个问题


上面的代码在我的项目中工作,我使用用户+权限模块堆栈。

cgridview有一个函数afterAjaxUpdate,在更新完成后运行。如果收到403响应,您是否尝试过使用该选项重定向它们


还有一个ajaxUpdateError(可能这是您应该使用的),您可以用同样的方式使用它,当收到403响应时,将它们从javascript重定向到登录页面。

我尝试过这些选项;但是它们只有在你不使用权限模块的情况下才有效,比如admin和clientI找到了流程;权限模块使用模块默认控制器中的错误方法捕获错误;此方法在需要登录之前触发。没有流<代码>如果($user->isGuest==true)$user->loginRequired();否则抛出新的CHttpException(403,$message)我想它在这里。会话超时后,用户必须注销,所以他的角色将是来宾。作为一名新手,我无法理解如何使用loginRequiredAjaxResponse来处理ajax会话超时。
<?php
    if (Yii::app()->components['user']->loginRequiredAjaxResponse){
        Yii::app()->clientScript->registerScript('ajaxLoginRequired', '
            jQuery("body").ajaxComplete(
                function(event, request, options) {
                    if (request.responseText == "'.Yii::app()->components['user']->loginRequiredAjaxResponse.'") {
                        window.location.href = "/login";
                    }
                }
            );
        ');
    }
?>
public function loginRequired()
    {
        $app=Yii::app();
        $request=$app->getRequest();

        if(!$request->getIsAjaxRequest())
        {
            ....
        }
        elseif(isset($this->loginRequiredAjaxResponse))
        {
            echo $this->loginRequiredAjaxResponse;
            Yii::app()->end();
        }

        throw new CHttpException(403,Yii::t('yii','Login Required'));
    }