Т.к. я использую форум с авторизацией в программе через API с использование ключа, то тут возникла проблема.
Пример авторизации происходит так:
https://SiteName/applications/nexus/interface/licenses/?info&key=MY_KEY
То у меня выбивает ошибку с ответом 400
{"errorCode":0,"errorMessage":"INTERNAL_ERROR"}
Методом подстановки и сравнения файлов. Выяснилось, что подобная проблема проявляется в файле:
../system/Node/Model.php
В функции на 1145-ой строке.
В 4.4.4 функция выглядит вот так:
public function children( $permissionCheck='view', $member=NULL, $subnodes=TRUE, $skip=null, $_where=array() )
{
$children = array();
/* Load member */
if ( $permissionCheck !== NULL )
{
$member = ( $member === NULL ) ? \IPS\Member::loggedIn() : $member;
$cacheKey = md5( $permissionCheck . $member->member_id . $subnodes . json_encode( $skip ) . json_encode( $_where ) );
}
else
{
$cacheKey = md5( $subnodes . json_encode( $skip ) . json_encode( $_where ) );
}
if( isset( $this->_childrenResults[ $cacheKey ] ) )
{
return $this->_childrenResults[ $cacheKey ];
}
В 4.4.6 функция выглядит вот так:
public function children( $permissionCheck='view', $member=NULL, $subnodes=TRUE, $skip=null, $_where=array() )
{
$children = array();
$member = $member ?: \IPS\Member::loggedIn();
/* Load member */
if ( $permissionCheck !== NULL AND \in_array( 'IPS\Node\Permissions', class_implements( $this ) ) )
{
$cacheKey = md5( $permissionCheck . $member->member_id . $subnodes . json_encode( $skip ) . json_encode( $_where ) );
}
else
{
$cacheKey = md5( $subnodes . json_encode( $skip ) . json_encode( $_where ) );
}
if( isset( $this->_childrenResults[ $cacheKey ] ) )
{
return $this->_childrenResults[ $cacheKey ];
}
Как видим у условии, есть 3 изменения:
1. Вместо
if ( $permissionCheck !== NULL )
Стоит
if ( $permissionCheck !== NULL AND \in_array( 'IPS\Node\Permissions', class_implements( $this ) ) )
Здесь все хорошо, движок не выбивает ошибку.
2. Строка с переменной $member выведена перед условием $permissionCheck и имеет вид:
Вместо
$member = ( $member === NULL ) ? \IPS\Member::loggedIn() : $member;
Стоит
$member = $member ?: \IPS\Member::loggedIn();
Пока что временным решением стоит следующее решение:
Новая переменная $member из 4.4.6 возвращена в условие $permissionCheck. Полет нормальный, API работает.
Результат исправления в коде:
public function children( $permissionCheck='view', $member=NULL, $subnodes=TRUE, $skip=null, $_where=array() )
{
$children = array();
/* Load member */
if ( $permissionCheck !== NULL AND \in_array( 'IPS\Node\Permissions', class_implements( $this ) ) )
{
$member = $member ?: \IPS\Member::loggedIn();
$cacheKey = md5( $permissionCheck . $member->member_id . $subnodes . json_encode( $skip ) . json_encode( $_where ) );
}
else
{
$cacheKey = md5( $subnodes . json_encode( $skip ) . json_encode( $_where ) );
}
if( isset( $this->_childrenResults[ $cacheKey ] ) )
{
return $this->_childrenResults[ $cacheKey ];
}
У кого есть возможность отправить в багфикс IPS - сделайте. Ошибка очень нелицеприятная