Для авторизации на сайте давно использую плагин WordPress social login. Всё вроде работало, но, как теперь выяснилось, не совсем. Глюк интересен тем, что не каждому он попадался под руки.

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

Например, Facebook и Google при попытке авторизовать через себя пользователей выдавали мало о чём говорящую ошибку, связанную с невозможностью создания пользователя с пустым именем, типа:

An error occurred while creating a new user

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

На деле, как уже сказал, причина совсем в другом.

Чтобы поправить ситуацию необходимо воспользоваться дополнительным плагином — WordPress Special Characters in Usernames, который фильтрует имя пользователя от непригодных для использования символов. Те символы, которые можно заменить на другие — заменяются, остальные удаляются. Также удаляются лишние пробелы. Вещь нужная. Возникает лишь вопрос: почему столь необходимый и несложный в реализации функционал нельзя было добавить в сам плагин социальной авторизации? Автор плагина, похоже, просто не хочет этим заниматься, советуя пользоваться этим плагином.

Однако это не всё решение. Проблема может сохраниться для тех пользователей, у которых имена в соцсетях длинные. Чтобы иметь возможность работать с этими именами необходимо изменить параметры таблицы wp_users в базе данных. Делать это придётся руками, например, через phpMyAdmin:

Таблица wp_users в phpMyAdmin

Увеличиваем размеры полей user_login и user_nicename. Я сделал значения в 255 знаков, хотя это и довольно много для имён.