Перейти к содержанию

Ошибка API в IPS 4.4.6


Рекомендуемые сообщения

Т.к. я использую форум с авторизацией в программе через 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 - сделайте. Ошибка очень нелицеприятная

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...