Вы здесь

HybridAuth Social Login. Ошибка при входе на сайт через Facebook, если пользователь был ранее удалён

0

Приветствую!

Жаль, что на данном сайте нет приватных сообщений для пользователей, так бы написал напрямую разработчику модуля, но придётся как вопрос оформлять. Ладно, не суть..

Ситуация такая:

  1. Пользователь создал профиль, используя Facebook;
  2. Администратор удалил этого пользователя через админку;
  3. Повторная регистрация (вход) этого пользователя через Facebook — даёт километровую ошибку "Uncaught exception thrown in session handler" (листинг ниже) и просто редиректит на форму входа. При этом пользователь не создаётся и, логично, не входит на сайт.

Листинг ошибки (без изменения, так и показывается):

PDOException: 
SQLSTATE[23000]: 
Integrity constraint violation: 
1048 Column 'uid' cannot be null: 
UPDATE {sessions} SET uid=:db_update_placeholder_0, cache=:db_update_placeholder_1, hostname=:db_update_placeholder_2, session=:db_update_placeholder_3, timestamp=:db_update_placeholder_4 WHERE ( (sid = :db_condition_placeholder_0) AND (ssid = :db_condition_placeholder_1) ); Array ( [:db_update_placeholder_0] => [:db_update_placeholder_1] => 0 [:db_update_placeholder_2] => 170.110.31.202 [:db_update_placeholder_3] => HA::CONFIG|a:3:{s:14:"php_session_id";s:51:"s:43:"KQHvqOBlt-C1yRkEgUjWQhF6Q3fGc9sWuV95JUtCe7A";";s:7:"version";s:16:"s:9:"2.4.2-dev";";s:6:"config";s:1469:"a:8:{s:8:"base_url";s:45:"http://mysite.ru.ru/hybridauth/endpoint";s:9:"providers";a:3:{s:9:"Vkontakte";a:5:{s:7:"enabled";b:1;s:4:"keys";a:3:{s:2:"id";s:7:"5011133";s:3:"key";s:0:"";s:6:"secret";s:20:"2phGt0DyGufWlFiRWC6h";}s:5:"scope";s:0:"";s:7:"display";s:0:"";s:15:"hauth_return_to";s:45:"http://mysite.ru.ru/hybridauth/endpoint";}s:13:"Odnoklassniki";a:5:{s:7:"enabled";b:1;s:4:"keys";a:3:{s:2:"id";s:10:"1147737088";s:3:"key";s:17:"CBAFBKGFEBABABABA";s:6:"secret";s:24:"C3DF303254329439E51BED8F";}s:5:"scope";s:0:"";s:7:"display";s:0:"";s:15:"hauth_return_to";s:45:"http://mysite.ru.ru/hybridauth/endpoint";}s:8:"Facebook";a:5:{s:7:"enabled";b:1;s:4:"keys";a:3:{s:2:"id";s:15:"119735191703405";s:3:"key";s:0:"";s:6:"secret";s:32:"6b49206e9296294de220397b9df8311f";}s:5:"scope";a:1:{s:5:"email";s:5:"email";}s:7:"display";s:4:"page";s:15:"hauth_return_to";s:45:"http://mysite.ru.ru/hybridauth/endpoint";}}s:10:"debug_mode";i:0;s:10:"debug_file";s:24:"tmp/hybridauth.debug.log";s:9:"path_base";s:79:"/path/to/mysite.ru/public_html/sites/all/libraries/hybridauth/Hybrid/";s:14:"path_libraries";s:90:"/path/to/mysite.ru/public_html/sites/all/libraries/hybridauth/Hybrid/thirdparty/";s:14:"path_resources";s:89:"/path/to/mysite.ru/public_html/sites/all/libraries/hybridauth/Hybrid/resources/";s:14:"path_providers";s:89:"/path/to/mysite.ru/public_html/sites/all/libraries/hybridauth/Hybrid/Providers/";}";}HA::STORE|a:2:{s:35:"hauth_session.facebook.is_logged_in";s:4:"i:1;";s:41:"hauth_session.facebook.token.access_token";s:191:"s:182:"CAABs5gWRj20BAL0VbKVUJ83VfoiZAiNeHGeC8DZA0muK8yWnIpwBaflzwHwmsGibvIZCvfus5nKkkvWIgf9TWgWJ5PBN6rYxMcZCg2VHh5Cc2sK7aOX8SWzffyWmG7ldpQghu4mI7G6sKME4BxvK7BZBSWAebniQfYf660B1c0R3QwHwqNAtJ";";}fb_119735191703405_access_token|s:182:"CAABs5gWRj20BAL0VbKVUJ83VfoiZAiNeHGeC8DZA0muK8yWnIpwBaflzwHwmsGibvIZCvfus5nKkkvWIgf9TWgWJ5PBN6rYxMcZCg2VHh5Cc2sK7aOX8SWzffyWmG7ldpQghu4mI7G6sKME4BxvK7BZBSWAebniQfYf660B1c0R3QwHwqNAtJ";fb_119735191703405_user_id|s:15:"688685894569360";messages|a:1:{s:5:"error";a:12:{i:0;s:339:"<em class="placeholder">Notice</em>: Trying to get property of non-object в функции <em class="placeholder">_hybridauth_user_login_access_by_uid()</em> (строка <em class="placeholder">902</em> в файле <em class="placeholder">/path/to/mysite.ru/public_html/sites/all/modules/hybridauth/hybridauth.module</em>).";i:1;s:299:"<em class="placeholder">Notice</em>: Trying to get property of non-object в функции <em class="placeholder">user_login_submit()</em> (строка <em class="placeholder">2308</em> в файле <em class="placeholder">/path/to/mysite.ru/public_html/modules/user/user.module</em>).";i:2;s:301:"<em class="placeholder">Notice</em>: Trying to get property of non-object в функции <em class="placeholder">user_login_finalize()</em> (строка <em class="placeholder">2283</em> в файле <em class="placeholder">/path/to/mysite.ru/public_html/modules/user/user.module</em>).";i:3;s:306:"<em class="placeholder">Warning</em>: Creating default object from empty value в функции <em class="placeholder">user_login_finalize()</em> (строка <em class="placeholder">2286</em> в файле <em class="placeholder">/path/to/mysite.ru/public_html/modules/user/user.module</em>).";i:4;s:299:"<em class="placeholder">Notice</em>: Undefined property: stdClass::$uid в функции <em class="placeholder">user_login_finalize()</em> (строка <em class="placeholder">2289</em> в файле <em class="placeholder">/path/to/mysite.ru/public_html/modules/user/user.module</em>).";i:5;s:322:"<em class="placeholder">Notice</em>: Undefined property: stdClass::$uid в функции <em class="placeholder">hybridauth_user_login()</em> (строка <em class="placeholder">173</em> в файле <em class="placeholder">/path/to/mysite.ru/public_html/sites/all/modules/hybridauth/hybridauth.module</em>).";i:6;s:306:"<em class="placeholder">Notice</em>: Undefined property: stdClass::$timezone в функции <em class="placeholder">system_user_login()</em> (строка <em class="placeholder">2006</em> в файле <em class="placeholder">/path/to/mysite.ru/public_html/modules/system/system.module</em>).";i:7;s:290:"<em class="placeholder">Notice</em>: Undefined property: stdClass::$uid в функции <em class="placeholder">user_access()</em> (строка <em class="placeholder">808</em> в файле <em class="placeholder">/path/to/mysite.ru/public_html/modules/user/user.module</em>).";i:8;s:290:"<em class="placeholder">Notice</em>: Undefined property: stdClass::$uid в функции <em class="placeholder">user_access()</em> (строка <em class="placeholder">820</em> в файле <em class="placeholder">/path/to/mysite.ru/public_html/modules/user/user.module</em>).";i:9;s:292:"<em class="placeholder">Notice</em>: Undefined property: stdClass::$roles в функции <em class="placeholder">user_access()</em> (строка <em class="placeholder">821</em> в файле <em class="placeholder">/path/to/mysite.ru/public_html/modules/user/user.module</em>).";i:10;s:290:"<em class="placeholder">Notice</em>: Undefined property: stdClass::$uid в функции <em class="placeholder">user_access()</em> (строка <em class="placeholder">827</em> в файле <em class="placeholder">/path/to/mysite.ru/public_html/modules/user/user.module</em>).";i:11;s:290:"<em class="placeholder">Notice</em>: Undefined property: stdClass::$uid в функции <em class="placeholder">user_access()</em> (строка <em class="placeholder">830</em> в файле <em class="placeholder">/path/to/mysite.ru/public_html/modules/user/user.module</em>).";}} [:db_update_placeholder_4] => 1439631488 [:db_condition_placeholder_0] => YmPEkSSCMFwkveUIh0eNu7Th6T196IRHno7f488n6mQ [:db_condition_placeholder_1] => ) in _drupal_session_write() (line 209 of /path/to/mysite.ru/public_html/includes/session.inc).

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

Мои действия:
1. На Facebook поменял основную почту аккаунта — не помогло;
2. На Facebook удалил у пользователя приложение для входа — не помогло.
3. На Facebook создал ещё одно приложение для входа (с другими ключами и названием) — не помогло.

Как вы уже могли догадаться, этот пользователь и есть я — отсюда и желание решить эту проблему, т.к. в своём же проекте сидеть всегда как admin — не очень хочется, а других соц. сетей не держу ;)

Отсюда вопрос: что произошло и как это исправить? Буду рад любой помощи..

Версия Drupal: 
7.x
Связанные проекты: 
HybridAuth Social Login
Вопрос задан 15.08.2015 - 12:58

Подобное наблюдалось и с другими модулями

Чисто предположение: в БД где-то данные остаются и перезаписываться нормально не дают

Комментарий оставлен 15.08.2015 - 17:43

А каким образом происходило выполнение пункта "2. Администратор удалил этого пользователя через админку;"?

Комментарий оставлен 15.08.2015 - 19:32

Там есть несколько способов отмены аккаунта - каким именно вы воспользовались?

Комментарий оставлен 15.08.2015 - 23:36

Итак:

  1. Выделил чекбокс напротив имени пользователя в админке (admin/people);
  2. Выбрал в выпадающем списке "Удалить выбранные учётные записи";
  3. Подтвердил удаление.

В настройках учётной записи (admin/config/people/accounts) вот такие настройки — "При удалении учётной записи пользователя > Удалить учётную запись и все её материалы".

При этом никаких материалов у этого пользователя не было, присутствие на сайте пару часов и без какой-либо активности.

Просто непонятно — чего ему именно этот аккаунт не понравился-то? Уже тестил на других соц. сетях и аккаунтах (даже специально этот же e-mail адрес указывал) — без сучка и задоринки всё работает.

Комментарий оставлен 17.08.2015 - 12:29

Ответы

0

Проблема крылась в БД.

При удалении пользователя через админку Друпала почему-то произошло следующее: учётная запись пользователя удалилась из основной таблицы пользователей, а из таблиц модуля — нет.

По какой причине — не знаю, может на сервере какие-то провисания были и не обработался запрос до конца или в самом модуле баг (всякое бывает).

Как исправить:

  1. Идём в MySQL вашего сайта;
  2. Ищем таблицы: _hybridauth_identity и _hybridauth_session;
  3. Выписываем (запоминаем, etc.) все UID пользователей из любой таблицы;
  4. Переходим в таблицу _users;
  5. Начинаем смотреть и сравнивать UID с теми, которые выписывали (запоминали, etc.).

Зачем это надо? Чтобы выяснить какой был UID у пользователя, который был удалён. Далее — просто удаляем запись с этим UID из таблиц _hybridauth_identity и _hybridauth_session.

Вот и всё, что нужно сделать! Теперь можно по-новой авторизироваться/регистрироваться на сайте через этот социальный аккаунт.

Ответ дан 17.08.2015 - 17:28

Второй раз не пробовали удалить аккаунт, чтобы узнать - это баг модуля или сервер завис?

Комментарий оставлен 18.08.2015 - 23:56

Это точно не баг модуля, я специально проверял - всё реализовано корректно, при удалении пользователя должны удаляться записи из указанных двух таблиц:

/**
 * Implements hook_user_delete().
 */
function hybridauth_user_delete($account) {
  _hybridauth_identity_delete_by_uid($account->uid);
  _hybridauth_session_delete_by_uid($account->uid);
}
Комментарий оставлен 19.08.2015 - 11:41

Да, глюк на сервере был. Перепроверял много раз.
К модулю претензий никаких, всё чётко работает и сделан отлично!

Комментарий оставлен 25.08.2015 - 19:39