Какие ограничения вообще есть?
Какие ограничения вообще есть?
Решил полностью проблему. Потребовалось изменить значения в базе данных и дописать логику в controller connector.php
начальные условия:
1. Логин для системы - берется из поля username Facebook - Он всегда на английском. НО бывают что в нем встречаются символ точка - что запрещено в использовании в oxwall.
2. В faceboo username не всегда есть. Иногда у пользователя его нет, а есть только его ID. Но у пользователя всегда есть поле email.
3. В БД oxwall в таблице для FaceBook есть неточность.
Значит так:
1. Правим Базу данных:
В таблице fb_connect_field перечилен метчинг полей API facebook и и полей в oxwall. Есть запись: question USERNAME = name - что не есть правильно! Ибо в name от facebook приходит не username пользователя, а его полное имя (то что отобразается у пользователя в профиле большими буквами). Нужно это поле ручками (больше ни где этого не сделаешь) заменить на username.
У меня это выгладит так:
Поле realname - изменяется из аднинки fbconnect. Для него я установил значение name - оно спокойно съедает полные имена пользователей в FaceBook (например Иванов Иван)
2. После этих правок все будет работать в том случае если:
а. У пользователя в facebook есть username (это важно)
б. В facebook username пользователя не используется точка (не пройдет проверку да и oxwall с такими usernamr не работает)
КАК Я решил эту проблему (каждый может решить по своему но я сделал это так:
в контроллере fbconnect ow_plugin/fbconnect/controllers/connect.php сделал следующие правки:
Строка 81:
$questions = $this->service->requestQuestionValueList($fbUser);
Получает массив из facebook.
В массиве как раз key = то что в базе в таблице fb_connect_field в поле question
1. Ловим точку в username:
$questions = $this->service->requestQuestionValueList($fbUser);
$username = str_replace(".", "_", $questions['username']);
$password = uniqid();
Теперь добавляем условие, что если username пустое, придумываем свое:
if ($username == "") {
$explode_email = explode ("@", $questions["email"]);
$username = str_replace(".", "_", $explode_email[0]);
}
Я решил взять username из его email, т.к. ту часть которая идет до @ при этом, так же точки заменяю на _
Конечно, это не обеспечивает полной уникальности, и наверное стоит добавить еще что, но я не стал пока заморачиваться.
Собственно после этих правок все те пользователи которые не смогли зайти (а были и такие у которых и точки в username и те у которых username просто нет) смогли залогиниться.
причем в realname попадает значение name из facebook на русском, и ни каких проблем нет.
Enjoy работает тут http://friendfish.ru
Я решил взять username из его email, т.к. ту часть которая идет до @ при этом, так же точки заменяю на _
было бы идеально, если б это вы направили разработчикам как решение или сделайте платное альтернативное решение, хоть на хостинг - да капнет.
а так за решение + жирный!