首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当无效用户时,Modx登录preHook中断

当无效用户时,Modx登录preHook中断
EN

Stack Overflow用户
提问于 2020-10-20 11:43:20
回答 1查看 58关注 0票数 1

我试图添加一个auth控件来验证用户是否已经登录,为此,我使用了登录preHook,我的工作基于这个https://forums.modx.com/thread/?thread=100027&page=3,这是我最后的预挂钩代码:

代码语言:javascript
复制
<?php
$modx->log(modX::LOG_LEVEL_ERROR, "Running login preHook ");
if (!isset($_GET['service'])){
    $formFields = $hook->getValues();
    $username = $formFields['username'];
    $modx->user = $modx->getObject('modUser', array('username' => $username, ));
    //Agregarle validacion
    if (isset($modx->user)) {
        $modx->log(modX::LOG_LEVEL_ERROR, "Captured usernames is ".$username. ' loaded user is ' . isset($modx->user));
        $profile = $modx->user->getOne('Profile');
        if (isset($profile)) {
            $extended = $profile->get('extended');
            $modx->log(modX::LOG_LEVEL_ERROR, "Logged is ".$extended['logged'] );
            if ($extended['logged'] == '1') {
                  $url = $modx->makeURL(38, '',  array('userblocked' => $username), 'https');
                  $modx->log(modX::LOG_LEVEL_ERROR, "Url is ".$url );
                  $modx->sendRedirect($url);
                  return false;
            }        
        } else {
            $errorMsg = "User profile for ".$username. " not found";
            $modx->log(modX::LOG_LEVEL_ERROR, $errorMsg );
            $hook->addError('user',$errorMsg);
            return false;
        }
        
    } else {
        $errorMsg = "User ".$username. " not found";
        $modx->log(modX::LOG_LEVEL_ERROR, $errorMsg );
        $hook->addError('user',$errorMsg);
        return false;
    }
    
} else {
    return true;    
}

当我试图使用一个有效的用户登录时,它会像预期的那样工作,但是当我在登录名上输入随机的胡言乱语时,我会得到以下错误:

致命错误:未捕获错误:调用/home/magdal31/coreM0dXF1L3s/model/modx/modaccessibleobject.class.php:215堆栈跟踪中的null成员函数get():#0 /home/magdal31/coreM0dXF1L3s/model/modx/modaccessibleobject.class.php(36):modAccessibleObject>checkPolicy(‘load’) #1 /home/magdal31/coreM0dXF1L3s/xpdo/xpdo.class.php(757):modAccessibleObject::_loadInstance(Object(modX),'modChunk',数组) #2 /home/magdal31/coreM0dXF1L3s/xpdo/om/xpdoquery.class.php(584):xPDO->调用(‘modChunk’,'_loadInstance',Array) #3 /home/magdal31/coreM0dXF1L3s/xpdo/om/xpdoquery.class.php(566):xPDOQuery->水合物图形Object( /home/magdal31/coreM0dXF1L3s/xpdo/om/xpdoobject.class.php(539):xPDOQuery->/home/magdal31/coreM0dXF1L3s/xpdo/om/xpdoobject.class.php(539):xPDOQuery->/home/magdal31/coreM0dXF1L3s/xpdo/om/xpdoobject.class.php(539):(PDOStatement),( true) #5 /home/magdal31/coreM0dXF1L3s/xpdo/xpdo.class.php(757):xPDOObject::loadCollectionG图(Object(ModX)、'modChunk‘、Array、Array、true) #6 /home/magdal31/coreM0dXF1L3s/xpdo/xpdo.class.php(1088):xPDO->调用(’modChunk‘、’loadCollectionG.‘、Array) #7 /home/magdal31 31/coreM0dXF1L3s/ in /home/magdal31/coreM0dXF1L3s/model/modx/modaccessibleobject.class.php on 215

我的内部modx日志只写着:

2020-10-20 12:24:30运行登录preHook 2020-10-20 12:24:30用户sdfasfa未找到

知道会发生什么事吗?

EN

回答 1

Stack Overflow用户

发布于 2020-10-21 15:08:32

我从Modx社区论坛上得到了答案,并在这里添加了它,以防其他人有同样的问题,或者类似的问题,下面是答案:

“您可能不应该用null覆盖$modx->user。如果您使用的话,尝试一下。”

代码语言:javascript
复制
$myuser = $modx->getObject('modUser', array('username' => $username, ));
//Agregarle validacion
if ($myuser) {
    $modx->user = $myuser;
    ...

而不是

代码语言:javascript
复制
$modx->user = $modx->getObject('modUser', array('username' => $username, ));
//Agregarle validacion
if (isset($modx->user)) {
   ....

https://community.modx.com/t/error-when-adding-prehook-to-login/3219/3?u=camicase82

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64444438

复制
相关文章

相似问题

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