Ошибка авторизации на продакшине

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
kuliev
Сообщения: 6
Зарегистрирован: 2019.08.04, 09:07

Ошибка авторизации на продакшине

Сообщение kuliev »

Доброго времени суток!

Разрабатывал проект на Yii2 на OpenServere. В локальной среде все работает отлично. Загрузил проект на публичный сервер и в момент входа в админку получаю ошибку:

PHP Notice – yii\base\ErrorException
Array to string conversion

Код: Выделить всё

1. in /var/www/qwerty/data/www/example.ru/vendor/yiisoft/yii2/web/User.phpat line 258
* @return bool whether the user is logged in
     */
    public function login(IdentityInterface $identity, $duration = 0)
    {
        if ($this->beforeLogin($identity, false, $duration)) {
            $this->switchIdentity($identity, $duration);
            $id = $identity->getId();
            $ip = Yii::$app->getRequest()->getUserIP();
            if ($this->enableSession) {
                $log = "User '$id' logged in from $ip with duration $duration.";
            } else {
                $log = "User '$id' logged in from $ip. Session not enabled.";
            }
 
            $this->regenerateCsrfToken();
 
            Yii::info($log, __METHOD__);
            $this->afterLogin($identity, false, $duration);
        }
	}
Ошибку показывает на вот этом участке кода:

Код: Выделить всё

$log = "User '$id' logged in from $ip with duration $duration.";
Никак не могу понять в чем дело. Объект в метод передается, данные в нем есть...
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: Ошибка авторизации на продакшине

Сообщение rak »

в ошибке же все написано
Array to string conversion.
kuliev
Сообщения: 6
Зарегистрирован: 2019.08.04, 09:07

Re: Ошибка авторизации на продакшине

Сообщение kuliev »

rak писал(а): 2021.02.08, 14:18 в ошибке же все написано
Array to string conversion.
Это я понимаю, что массив не может конвертировать в строку.
При авторизации я вызываю этот метод login(IdentityInterface $identity, $duration = 0)
Первым параметром идет Объект пользователя который производит авторизацию, вторым время на которое запомнить данную авторизацию.

При перед отправлением данных в метод LOGIN проверил исходные данные VAR_DUMP()

Не пойму почему он пишет, что массив не может преобразовать в строку и останавливается на $log = "User '$id' logged in from $ip with duration $duration.";
Возможно, что $id = $identity->getId(); вернул массив... Попробую чуть позже это проверить.

И как писал ранее если проект перенести на OpenServer то такой проблемы нет :? :?
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: Ошибка авторизации на продакшине

Сообщение rak »

видимо на опенсервере другие настройки
kuliev
Сообщения: 6
Зарегистрирован: 2019.08.04, 09:07

Re: Ошибка авторизации на продакшине

Сообщение kuliev »

Может эти данные помогут... Найти вариант причины такой ошибки...
Изображение
Изображение
Изображение
Изображение
Изображение
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: Ошибка авторизации на продакшине

Сообщение rak »

чуть выше сделать

Код: Выделить всё

var_dump([$id, $ip, $duration]);die();
или же дебаггером посмотреть.
kuliev
Сообщения: 6
Зарегистрирован: 2019.08.04, 09:07

Re: Ошибка авторизации на продакшине

Сообщение kuliev »

rak писал(а): 2021.02.09, 13:28 чуть выше сделать

Код: Выделить всё

var_dump([$id, $ip, $duration]);die();
или же дебаггером посмотреть.

Код: Выделить всё

    /**
     * Returns a string to be prefixed to the given message.
     * If [[prefix]] is configured it will return the result of the callback.
     * The default implementation will return user IP, user ID and session ID as a prefix.
     * @param array $message the message being exported.
     * The message structure follows that in [[Logger::messages]].
     * @return string the prefix string
     */
    public function getMessagePrefix($message)
    {
        if ($this->prefix !== null) {
            return call_user_func($this->prefix, $message);
        }

        if (Yii::$app === null) {
            return '';
        }

        $request = Yii::$app->getRequest();
        $ip = $request instanceof Request ? $request->getUserIP() : '-';

        /* @var $user \yii\web\User */
        $user = Yii::$app->has('user', true) ? Yii::$app->get('user') : null;
        if ($user && ($identity = $user->getIdentity(false))) {
            $userID = $identity->getId();
        } else {
            $userID = '-';
        }

        /* @var $session \yii\web\Session */
        $session = Yii::$app->has('session', true) ? Yii::$app->get('session') : null;
        $sessionID = $session && $session->getIsActive() ? $session->getId() : '-';

        return "[$ip][$userID][$sessionID]";
    }
В общем переменная $userID возвращает пустой массив...

Код: Выделить всё

array(0) { } array(0) { }
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: Ошибка авторизации на продакшине

Сообщение rak »

как минимум - стоит обновить версию php, 5.4 в 2021 году - это не серьезно
модель User тоже было бы неплохо увидеть
kuliev
Сообщения: 6
Зарегистрирован: 2019.08.04, 09:07

Re: Ошибка авторизации на продакшине

Сообщение kuliev »

rak писал(а): 2021.02.09, 18:28 как минимум - стоит обновить версию php, 5.4 в 2021 году - это не серьезно
модель User тоже было бы неплохо увидеть
Версия PHP 7.4 стоит связка Nginx-proxy + Apache походу эту версию он от туда берет как нативную.
По поводу User проверю когда буду дома, отпишусь о результатах
Ответить