如何解决无效用户时Modx登录preHook中断
我正在尝试添加一个auth控件来验证用户是否已经登录,要实现这一点,我使用登录preHook,我的工作基于此https://forums.modx.com/thread/?thread=100027&page=3,这是我的最后一个prehook代码:
<?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 /模型/modx/modaccessibleobject.class.PHP(36):modAccessibleObject-> checkPolicy('load')#1 /home/magdal31/coreM0dXF1L3s/xpdo/xpdo.class.PHP(757):modAccessibleObject :: _ loadInstance(Object(modX ),'modChunk','modChunk',数组)#2 /home/magdal31/coreM0dXF1L3s/xpdo/om/xpdoquery.class.PHP(584):xPDO-> call('modChunk','_loadInstance',Array)# 3 /home/magdal31/coreM0dXF1L3s/xpdo/om/xpdoquery.class.PHP(566):xPDOQuery->hydrateGraPHParent(Array,Array)#4 /home/magdal31/coreM0dXF1L3s/xpdo/om/xpdoobject.class.PHP(539 ):xPDOQuery-> hydrateGraph(Object(PDOStatement),true)#5 /home/magdal31/coreM0dXF1L3s/xpdo/xpdo.class.PHP(757):xPDOObject :: loadCollectionGraph(Object(modX),'modChunk',Array,数组,true)#6 /home/magdal31/coreM0dXF1L3s/xpdo/xpdo.class.PHP(1088):xPDO-> call('modChunk','loadCollectionG ...',阵列)在第215行/home/magdal31/coreM0dXF1L3s/model/modx/modaccessibleobject.class.PHP中的#7 / home / magdal31 / coreM0dXF1L3s /
我的内部modx日志只说:
[2020-10-20 12:24:30](错误@ /home/magdal31/coreM0dXF1L3s/cache/includes/elements/modsnippet/114.include.cache.PHP:2)运行登录preHook [2020-10-20 12:24:30](错误@ /home/magdal31/coreM0dXF1L3s/cache/includes/elements/modsnippet/114.include.cache.PHP:29)找不到用户sdfasfa
有什么想法吗?
解决方法
我从Modx社区论坛获得了答案,并在此处添加了答案,以防万一其他人遇到相同或相似的问题,这是答案:
“您可能不应该将$ modx-> user替换为null。如果使用,请尝试使用它”
$myuser = $modx->getObject('modUser',array('username' => $username,));
//Agregarle validacion
if ($myuser) {
$modx->user = $myuser;
...
代替
$modx->user = $modx->getObject('modUser',));
//Agregarle validacion
if (isset($modx->user)) {
....
https://community.modx.com/t/error-when-adding-prehook-to-login/3219/3?u=camicase82
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。