Posted 3 августа, 20222 yr Время от времени в логах появляется ошибка, говорящая о том, что ее вызвал гость, на подобных страницах: https://ip-gamers.net/clients/orders/13 Сама ошибка вот: OutOfRangeException: (0) #0 ip-gamers.net/applications/nexus/modules/front/clients/invoices.php(58): IPS\Patterns\_ActiveRecord::load('13') #1 ip-gamers.net/system/Dispatcher/Dispatcher.php(153): IPS\nexus\modules\front\clients\_invoices->execute() #2 ip-gamers.net/index.php(13): IPS\_Dispatcher->run() #3 {main} Эту ошибку как то возможно исправить?
3 августа, 20222 yr Если гости не могут покупать в принципе, то добавить if ( !\IPS\Member::loggedIn()->member_id ) { \IPS\Output::i()->error( 'no_module_permission_guest', '2X215/3', 403, '' ); } перед строкой 54 (сразу после else).
3 августа, 20222 yr Author 1 минуту назад, Desti сказал: Если гости не могут покупать А гости в IPS разве априори что то могут покупать?
3 августа, 20222 yr Author 15 минут назад, Desti сказал: if ( !\IPS\Member::loggedIn()->member_id ) { \IPS\Output::i()->error( 'no_module_permission_guest', '2X215/3', 403, '' ); } Так, я это вставил в файл: Спойлер Как теперь проверить, выйдет ли подобная ошибка или нет? А ну вот: В счетах стали появляться счета от гостей: Но ошибка при этом появляться вроде перестала.
3 августа, 20222 yr Счета от гостей появляться будут, по умолчанию гость может положить товар в корзину, но для покупки нужна регистрация. Возможно, мое решение не самое корректное, может стоит перехватить исключение.. Замените 58-ю строку на это: (а первое исправление удалите) try { $this->invoice = \IPS\nexus\Invoice::load( \IPS\Request::i()->id ); } catch ( \OutOfRangeException $e ) { \IPS\Output::i()->error( 'node_error', '2X215/7', 404, '' ); }
3 августа, 20222 yr Author 14 минут назад, Desti сказал: Замените 58-ю строку на это: (а первое исправление удалите) Прости за такой глупый вопрос. Но 58 строка после редактирования или до? Вот в данный момент это фрагмент выглядит так: if ( \IPS\Member::loggedIn()->member_id ) { try { $this->invoice = \IPS\nexus\Invoice::loadAndCheckPerms( \IPS\Request::i()->id ); } catch ( \OutOfRangeException $e ) { \IPS\Output::i()->error( 'node_error', '2X215/1', 404, '' ); } } else if ( !\IPS\Member::loggedIn()->member_id ) { \IPS\Output::i()->error( 'no_module_permission_guest', '2X215/3', 403, '' ); } { /* Prevent the vid key from being exposed in referrers */ \IPS\Output::i()->sendHeader( "Referrer-Policy: origin" ); $key = isset( \IPS\Request::i()->key ) ? \IPS\Request::i()->key : ( isset( \IPS\Request::i()->cookie['guestTransactionKey'] ) ? \IPS\Request::i()->cookie['guestTransactionKey'] : NULL ); $this->invoice = \IPS\nexus\Invoice::load( \IPS\Request::i()->id ); if( $this->invoice->member->member_id or !$key or !isset( $this->invoice->guest_data['guestTransactionKey'] ) or !\IPS\Login::compareHashes( $key, $this->invoice->guest_data['guestTransactionKey'] ) ) { \IPS\Output::i()->error( 'no_module_permission_guest', '2X215/6', 404, '' ); } }
3 августа, 20222 yr $this->invoice = \IPS\nexus\Invoice::load( \IPS\Request::i()->id ); это заменить на то, что кинул он.
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.