@devel787

Как реализовать «Register with Facebook» аналогично Instagram на server-side?

Добрый день.

Есть задумка сделать мобильное приложение (Android, iOS), которое будет взаимодействовать с сервером через API.

На стороне сервера Django REST framework для API и небольшая самописная админ-панель на Django.

Регистрация пользователей предполагается через мобильное приложение и исключительно через Facebook (никаких регистраций с вводом email+password быть не должно). Случай один-в-один, как при использовании мобильного приложения для Instagram на Android.

Подскажите, пожалуйста, в какую сторону "копать" и как делаются подобные вещи?
Пытался сам гуглить -- ничего кроме привычной авторизации через соц. сети для мобильных приложений найти не удалось...

Как я вижу задачу на текущий момент:
1) Пользователь установил наше приложение.
2) Пользователь открыл приложение и увидел экран для регистрации.
3) Пользователь выбрал ”Register with Facebook”.
4) Каким-то образом произошла проверка правильности входа в Facebook + на этом этапе на сервере мы должны создать нового пользователя или удостоверится, что такой пользователь уже существует -- каким образом мы можем проделать такое на сервере??
-- в какой момент времени и что именно сообщит мобильное приложение серверу для этой операции??
5) После “log in” наше приложение посылает запросы к АПИ с указанием конкретного пользователя (и его пароля?), который осуществил регистрацию/вход через соц. сеть.

Интересует общее понимания такого рода взаимодействий, причём больше с серверной стороны.

Буду рад любым подсказкам.
  • Вопрос задан
  • 3364 просмотра
Решения вопроса 2
FanKiLL
@FanKiLL
Пользователь нажимает на кнопку, вы берёте id юзера в фейсбуке он уникальный и другую инфу, так же можете взять access_token если хотите делать какие то запросы в фейсбук.

Далее, отсылаете id юзера на сервер он уникальный помните, смотрим если есть юзер с таким id от фейсбука. Если нет, значит - можно зарегестрировать юзера, делаем юзера и привязываем этот facebook id к нему. Всё теперь юзер зарегестрирован и к нему привязан facebook id.

Если он нажимает на кнопку в приложении - вы отсылаете facebook id и юзер с таким facebook id на сервере находится, можно считать это за логин и пропустить юзера в ваше приложение.

На пятый пункт, нет пароль передавать нельзя, при регистрации или логине (лучше при логине) генерируете юзеру уже свой access_token с которым он может обращаться к вашему серверу.
Свой access_token выдавать при логине или после регистрации.

Теперь когда у юзера есть access_token от вашего сервера, он может делать запросы к вашему api серверу. Это значит, что он должен присылать этот токен с каждым обращением к вашему серверу, как он будет это делать зависит от дизайна вашего api. У фейсбука это как параметр в URL.
Я предпочитаю, чтобы access_token присылали в http хедерах.

Примерно, так... Одним ответом тут не отписаться( Спрашивайте ответим.
Ответ написан
В общих чертах:
в мобильном приложении пользователь нажимает на кнопку от фейсбука: https://developers.facebook.com/docs/android
Вы регистрируете в приложении callback который получит Sesssion, в котором будет access_token.
Далее вы посылаете инфу на сервер: fbid, access token... (и может быть ещё что-нибудь понадобится, я не знаю, серверную часть API я не писал).
После сервер обрабатывает ваш access token, может например спросит права, или спросит инфу пользователя, если всё в порядке,
тогда вы делаете запись в базу данных и возвращаете "уря, ты зашёл".

Костыли: 1. если вам ВДРУГ нужны права, а такое право - email (он хорош как уникальный id пользователя), права можно проверять с объекта Session, если вдруг не дал права, удаляете все права, и перезапрашиваете их заново, так как сервер это сделать не может.
2. acess token надо обновлять, он жив помоему примерно 30 дней.

-- каким образом мы можем проделать такое на сервере?? - запрос в граф апи на /me (https://developers.facebook.com/docs/graph-api/ref... )

PS: Помоему тут можно скачать FB APi https://github.com/sciyoshi/pyfacebook/ для присмыкающегося ползунка
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы