Posted 3 августа, 20222 yr comment_184495 Время от времени в логах появляется ошибка, говорящая о том, что ее вызвал гость, на подобных страницах: 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 comment_184500 Если гости не могут покупать в принципе, то добавить if ( !\IPS\Member::loggedIn()->member_id ) { \IPS\Output::i()->error( 'no_module_permission_guest', '2X215/3', 403, '' ); } перед строкой 54 (сразу после else).
3 августа, 20222 yr Author comment_184501 1 минуту назад, Desti сказал: Если гости не могут покупать А гости в IPS разве априори что то могут покупать?
3 августа, 20222 yr Author comment_184502 15 минут назад, Desti сказал: if ( !\IPS\Member::loggedIn()->member_id ) { \IPS\Output::i()->error( 'no_module_permission_guest', '2X215/3', 403, '' ); } Так, я это вставил в файл: Спойлер Как теперь проверить, выйдет ли подобная ошибка или нет? А ну вот: В счетах стали появляться счета от гостей: Но ошибка при этом появляться вроде перестала.
3 августа, 20222 yr comment_184503 Счета от гостей появляться будут, по умолчанию гость может положить товар в корзину, но для покупки нужна регистрация. Возможно, мое решение не самое корректное, может стоит перехватить исключение.. Замените 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 comment_184505 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 comment_184506 $this->invoice = \IPS\nexus\Invoice::load( \IPS\Request::i()->id ); это заменить на то, что кинул он.
3 августа, 20222 yr Author comment_184508 @Desti, @by_ix спасибо. Вы очень помогли. Если будут изменения сообщу.
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.