Вход через соцсеть не работает - причины по убыванию частоты
Кнопка провайдера не появилась в форме входа, либо сервис возвращает посетителя с меткой ошибки в адресе, либо вход проходит, а учётная запись на сайте так и не создаётся. Разбираем причины в порядке убывания частоты.
С чего начать
Клик по кнопке даёт три исхода, и каждый уводит в свою половину списка причин. Страница провайдера не открылась - смотрим окружение и настройки модуля. Вернул с меткой ошибки - смотрим приложение. Вернул молча, а гость остался гостем - смотрим создание пользователя.
Проверяем окружение до всех настроек:
php -m | grep -i openssl # без библиотеки шифрования обмен ключами не начнётсяcurl -sI https://example.org/ | head -n 1 # сайт обязан отвечать по защищённому протоколуcurl -sI http://example.org/ | grep -i location # и уводить на него простой адрес тоже обязан# проверять вход удобнее в приватном окне: в своей сессии половина отказов не виднаМодуль соцсервисов работает только по защищённому протоколу и требует openssl в сборке PHP. Пустой вывод первой команды означает, что вход не запустится ни у одного провайдера.
Смотрим, доступен ли обработчик возврата снаружи:
curl -sI 'https://example.org/bitrix/tools/oauth/vkontakte.php' | head -n 1# фиксированный обработчик ВКонтакте: провайдер зовёт его сам, без куки и авторизации# ответ 200 или 302 - нормально, а 403 и 404 означают, что возврату некуда прийтиУ ВКонтакте адрес возврата фиксирован, у остальных он берётся из настроек модуля и оттуда же копируется. Придуманный руками адрес даёт отказ уже после согласия посетителя, когда причина совсем не очевидна.
Читаем адрес, на который вернул провайдер:
https://example.org/bitrix/tools/oauth/vkontakte.php?auth_service_id=VKontakte&auth_service_error=1# метка auth_service_error=1 означает отказ провайдера или обрыв обмена ключами# ключи и адреса возврата всех сервисов: /bitrix/admin/settings.php?lang=ru&mid=socialservicesМетка ошибки в адресе отделяет отказ провайдера от поломки на самом сайте. Белый экран вместо возврата читается так же: разбирать надо приложение, а не шаблон формы входа.
Сверяем версии модулей платформы:
grep -m1 VERSION /home/bitrix/www/bitrix/modules/socialservices/install/version.phpgrep -m1 VERSION /home/bitrix/www/bitrix/modules/main/install/version.php# версия модуля лежит в массиве $arModuleVersion рядом с датой сборки# для входа через Битрикс24.Network нужен main от 25.100.500 и socialservices от 24.100.100Провайдеры меняют свой протокол в одностороннем порядке, и старый модуль перестаёт понимать ответ. Правка файла провайдера прямо в ядре снимает симптом ровно до ближайшего обновления платформы.
Ищем обязательные поля пользователя:
$rows = \Bitrix\Main\UserFieldTable::getList([ 'select' => ['FIELD_NAME', 'MANDATORY'], 'filter' => ['=ENTITY_ID' => 'USER', '=MANDATORY' => 'Y'],])->fetchAll();print_r(array_column($rows, 'FIELD_NAME'));// такое поле обязано заполниться при первом входе, иначе запись не создастсяОбязательное пользовательское поле блокирует создание записи при первом входе. Провайдер его не отдаёт, вход завершается молча, и посетитель остаётся прежним гостем.
Причины
-
Адрес возврата приложения не совпадает с адресом сайта примерно 30% случаев
ПризнакПровайдер показывает отказ сразу после согласия и жалуется на несовпадение адреса возврата.
ПроверкаСверяем адрес из настроек модуля с полем приложения посимвольно, вместе с протоколом и поддоменом.
Что делатьКопируем адрес обратного вызова из интерфейса модуля и вписываем его в приложение без правок.
-
Нет защищённого протокола или библиотеки шифрования примерно 20% случаев
ПризнакКнопка нажимается, страница провайдера не открывается, а в журнале сервера пусто.
ПроверкаСмотрим, открывается ли сайт по защищённому протоколу и есть ли openssl среди расширений PHP.
Что делатьВыпускаем сертификат, переводим сайт целиком на защищённый протокол и включаем openssl в сборке.
-
Ключи приложения или запрошенные доступы не те примерно 16% случаев
ПризнакНа тестовом сайте вход работает, а на боевом провайдер возвращает отказ.
ПроверкаСверяем идентификатор и секрет с кабинетом провайдера и смотрим список выданных приложению доступов.
Что делатьПереносим ключи боевого приложения в блок нужного провайдера и добавляем доступы к почте и имени.
-
Устаревший модуль не понимает новый протокол провайдера примерно 15% случаев
ПризнакВозврат приходит с меткой auth_service_error, хотя вчера тот же вход работал.
ПроверкаСмотрим версии главного модуля и соцсервисов, а следом историю обновлений платформы.
Что делатьОбновляем платформу целиком: правка кода провайдера в ядре держится до ближайшего обновления.
-
Провайдер закрыл выдачу приложений или сменил экраны примерно 11% случаев
ПризнакНовое приложение в кабинете сервиса завести не получается, а старое отвечает отказом.
ПроверкаОткрываем кабинет разработчика провайдера и ищем там раздел создания новых приложений.
Что делатьПереносим вход на живой сервис, а кнопку закрытого убираем из формы авторизации.
-
Переход теряет параметры на правилах перенаправления примерно 8% случаев
ПризнакОшибка вылезает только на поддомене или сразу после переезда сайта на защищённый протокол.
ПроверкаПроходим цепочку перенаправлений и смотрим, доживают ли параметры запроса до обработчика возврата.
Что делатьПравим правила так, чтобы строка запроса уходила дальше без перекодировки и без обрезки.
Частые вопросы
Перестала работать авторизация через соцсети, что делать?
Начинать с обновления платформы: сервисы меняют свой протокол в одностороннем порядке, и старый модуль перестаёт понимать ответ. Правка файла провайдера в ядре живёт до ближайшего обновления, после чего симптом возвращается.
Что означает auth_service_error=1 в адресе?
Обмен с провайдером оборвался: не совпал адрес возврата, не подошли ключи либо сервис отказал в доступе. Разбор начинают со сверки адреса возврата и ключей приложения, а не с шаблона формы входа.
Почему ошибка появляется только на поддомене?
Приложение зарегистрировано на основной домен, а возврат приходит с другого адреса. У части провайдеров настройка распространяется на поддомены, у части - нет, и тогда для поддомена заводят отдельное приложение.
Кнопки провайдеров не выводятся, куда смотреть?
В настройки модуля соцсервисов: кнопка появляется только у включённого провайдера с заполненными ключами. Пустой список сервисов означает именно это, а не ошибку вёрстки шаблона.
Можно ли завести новое приложение в Одноклассниках?
Нет, создание пользовательских приложений там больше не поддерживается. Для новых подключений ориентируются на инструкцию по ВКонтакте, а кнопку закрытого сервиса убирают из формы входа.
Смежное
- Авторизация и сессии - оглавление подтемы
- Вход через внешний сервис: регистрация приложения, привязка, первый вход - рабочий сценарий целиком
- Соцсервисы и OAuth - устройство модуля и порядок подключения провайдера
- Не работает авторизация: причины по убыванию частоты - когда не проходит и обычный вход
- Страница и форма авторизации - куда встраиваются кнопки провайдеров
- Регистрация покупателей: форма, подтверждение, свои поля - обязательные поля учётной записи
- Переезд на HTTPS: контент, база, интеграции - защищённый протокол на весь сайт
- Редирект на другой домен: где ставить правило - перенаправления и потерянные параметры
- Пользователи, группы и права - как устроены учётные записи и доступ