Каков правильный способ использования django-allauth с tastypie?

Я пишу приложение Django, которое использует django-allauth для интеграции с Facebook, и использует django-tastypie для бэкэнд для приложения iOS. Приложение iOS будет использовать собственный SDK для iOS для Facebook. Я хотел бы иметь возможность регистрироваться и проверять пользователей Facebook и других пользователей из приложения iOS в дополнение к веб-сайту.

Проблема в том, что django-allauth, похоже, не имеет API, к которому можно получить доступ извне. Единственный чистый способ подключиться к allauth функциональности, кажется, через теги шаблонов Django. Есть ли способ показать эту функциональность, которая будет использоваться с tastypie?

Django-allauth - это открытый исходный код, поэтому я попытался разобрать код. Моя первоначальная идея - аутентифицировать пользователей на стороне iOS, используя собственный SDK для Facebook, а затем вручную заполнить информацию для SocialAccount, SocialToken и добавить SocialAccount в SocialApp (все это модели django-allauth). Тем не менее, это, кажется, довольно хакерское решение. Я бы хотел, чтобы было чистое создание всех этих моделей с учетом идентификатора Facebook или чего-то подобного.

Update: Было несколько обсуждение по этому вопросу на GitHub, В принципе, нет встроенных функций. Я собираюсь поднять пользовательское решение, которое касается только Facebook (потому что все, что я использую в своем приложении). Я буду публиковать то, что я сделал здесь позже, если это сработает.

Ответ 1

Быстрый поиск django-allauth показывает, что они используют модель SocialAccount для хранения данных по определенному методу аутентификации и типу социальной учетной записи.

Вам нужно создать конечную точку API на основе модели SocialAccount. Вам необходимо передать такие переменные, как: тип учетной записи (facebook, local, twitter и т.д.), Дополнительные переменные auth, необходимые социальным провайдерам. Затем в вашем коде вы можете создавать экземпляры модели SocialAccount, передавать данные, полученные от вызова конечной точки API, и запускать соответствующий вызов auth через django-allauth. Наконец, вы должны вернуть результат своего автоответчика.

Я не вижу большой причины использовать django-allauth только для локального /facebook auth, с небольшими усилиями у вас может быть целый спектр поставщиков социальных услуг.

Ответ 2

Я использовал библиотеку requests для работы с API facebook, и он отлично работает, я думаю, что ни один плагин для социального входа для Django не работает для других, кроме автора, если вы хотите серьезно что-то сделать.

PS. Я использовал django-rest-framework для создания остальной базы для мобильных приложений, в том числе для входа в локальную учетную запись и входа в социальный сайт.