我试图添加一个auth控件来验证用户是否已经登录,为此,我使用了登录preHook,我的工作基于这个https://forums.modx.com/thread/?thread=100027&page=3,这是我最后的预挂钩代码:
<?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未找到
知道会发生什么事吗?
发布于 2020-10-21 15:08:32
我从Modx社区论坛上得到了答案,并在这里添加了它,以防其他人有同样的问题,或者类似的问题,下面是答案:
“您可能不应该用null覆盖$modx->user。如果您使用的话,尝试一下。”
$myuser = $modx->getObject('modUser', array('username' => $username, ));
//Agregarle validacion
if ($myuser) {
$modx->user = $myuser;
...而不是
$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
https://stackoverflow.com/questions/64444438
复制相似问题