2015-02-17 4 views
7

Я использую Ionic framework для создания приложения, и теперь я хочу добавить логин facebook (oauth2). Я уже реализовал логин facebook на своем веб-сайте, используя OAuth; Я просто перенаправляю пользователя на соответствующий URL-адрес facebook, позволяю им вводить свои учетные данные, а затем получаю токен в моем (Flask) бэкэнд. Это работает как шарм.Как добавить логин OAuth facebook в Ionic/Angular?

Теперь я задаюсь вопросом, как я могу реализовать то же самое в своем приложении Ionic/Cordova/Angular. Как я вижу это сейчас есть несколько вариантов:

  • перенаправлять пользователя на мобильную версию Facebook внутри WebView Ионные/Кордова в приложение, чтобы проверить подлинность моего приложения (так же, как и я в моем обычном веб-сайте), а затем снова верните пользователя в приложение Ionic. У меня такое ощущение, что это неправильный способ сделать это.
  • Использование Facebooks Проверка подлинности Javascript, которая возвращает токен в приложение. Затем я могу отправить маркер на свой сервер, чтобы сохранить его для последующего использования.
  • Позвольте пользователю вставить свое имя пользователя и пароль в приложение Ionic и POST на свой сервер, а затем использовать те, чтобы аутентифицировать пользователя на facebook и получить для него токен. Очевидно, это полностью игнорирует цель OAuth, но я думаю, что это сработает.
  • Я прочитал this article on the Ionic blog о том, как внедрить Facebook, но использует Auth0 plugin, который я не хочу использовать (это стоит денег, и я не хочу быть зависимым от другой компании).
  • Еще один вариант, который я не в курсе ..

Так что теперь мне интересно; как лучше всего реализовать (на основе OAuth) вход в Facebook в моем приложении Ionic и почему? Все советы приветствуются!

ответ

8

Вы можете использовать $cordovaOauth.facebook в библиотеке ngCordova ионогенных Framework:

http://www.ngcordova.com

Вот две ссылки, которые могут поставить вас в правильном направлении по его использованию:

https://blog.nraboy.com/2015/02/make-facebook-mobile-app-ionic-framework/ http://ionicframework.com/blog/oauth-ionic-ngcordova/

Если ваша услуга зависит от точности данных входа в систему, вы можете проверить ее через внутренний сервер также. Однако этот подход RESTful похож на библиотеку JavaScript.

С уважением,

+0

Спасибо! Тем временем я экспериментирую с openFB (https://github.com/ccoenraets/OpenFB). Поэтому, если я правильно понимаю это; обычный способ заключается в том, чтобы пользователь был перенаправлен на запись FB из приложения, и когда он успешно входит в систему, само приложение может отправить токен на мой собственный сервер, чтобы я знал, что пользователь зарегистрировался. Правильно ли это? – kramer65

+0

Это один из многих способов сделать то, что вы хотите. Оба решения будут работать. –

+0

Ионная платформа теперь внедряет Facebook-логин: http://docs.ionic.io/v2.0.0-beta/docs/social-provider-facebook – TrtG

4

Попадая Facebook входа, работающих в мобильном приложении гибридного полдела. Другая половина делится учетными данными с бэкэндом. Я только что закончил реализацию этого проекта против флекса, поэтому я решил поделиться тем, что сработало.

Позвольте пользователю вставить свое имя пользователя и пароль в приложение Ionic и POST на свой сервер, а затем использовать те, чтобы аутентифицировать пользователя на facebook и получить для него токен. Очевидно, это полностью игнорирует цель OAuth, но я думаю, что это сработает.

Это была бы очень плохая идея (как вы указали, это нарушает принципы OAuth), и на самом деле это не сработает. Нет конечной точки, где вы можете программно передать Facebook логин и пароль и получить ответ в ответ (легально и без скребков).Вместо этого для получения маркера требуется обратный вызов с взаимодействием с пользователем, независимо от того, выполняется ли он на интерфейсе или на сервере. Рассмотрим случай two-factor authentication in Facebook, где пользователь должен получить и ввести код, отправленный на их мобильный телефон.

Использование Facebooks Проверка подлинности Javascript, которая возвращает токен в приложение. Затем я могу отправить маркер на свой сервер, чтобы сохранить его для последующего использования.

Yup, вот как это должно быть сделано. Это называется кросс-клиентской аутентификацией. У Facebook есть страница, которая explains auth tokens, что концептуально полезно и обсуждает множество различных сценариев, но, к сожалению, не содержит много полезных фрагментов кода.

Вы можете напрямую передать токен доступа на бэкэнд как часть процесса входа в систему. Бэкэнд может затем подтвердить токен. Предполагая, что вы используете стандартные пакеты Flask-Security и Flask-Social на бэкэнд, вы можете обернуть окно входа в флеш-социальную сеть, чтобы аутентифицировать пользователя, используя маркер, переданный из интерфейса. Вы можете найти пример кода в этом документе: https://gist.github.com/lrettig/7ca94ba45961207a7bd3

Также обратите внимание, что этот токен обычно действует только в течение нескольких часов. Если вам необходимо использовать бэкэнд для использования SDK Facebook от имени пользователя на постоянной основе, вам необходимо будет swap it for a Long-Term token.

Еще одна заметка, которая немного смутила меня: я заметил, что после аутентификации с Facebook на интерфейсе мне был вручен токен доступа, тогда как с использованием Python SDK на бэкэнд мне вместо этого был передан код, который необходимо обменять на токен перед тем, как любой запрос может быть выполнен. Я не уверен, почему разница, но коды и токены также описаны в документах Facebook.

+0

Спасибо! Теперь я реализовал нечто подобное, но я не уверен в следующем. Приложение отправляет токен на сервер, и сервер отвечает с userId. Последующие запросы к серверу затем выполняются с использованием userId и одного и того же токена facebook. Итак, давайте поговорим о безопасности; хотя только пользователь может получить действительный токен facebook, userId очень легко узнать о других пользователях (просто выполните поиск на нашем сайте и проверьте json). Так что мой вопрос; безопасно ли вообще, чтобы пользователь мог аутентифицироваться с помощью идентификатора userId и FB или я должен использовать другие меры? – kramer65

+0

Короткий ответ - да. OAuth обеспечивает аутентификацию и авторизацию. (В отличие от OpenID, который предоставляет только аутентификацию, см. Http://stackoverflow.com/questions/1087031/whats-the-difference-between-openid-and-oauth и https://en.wikipedia.org/wiki/ OAuth # OpenID_vs._pseudo-authentication_using_OAuth.) До тех пор, пока вы доверяете Facebook (или другому провайдеру) для надежного аутентификации, вы можете считать его безопасным. Рассмотрим контрфакт: если вам потребуется дополнительный учетный ключ при каждом входе в систему, то зачем использовать OAuth для аутентификации? Это раздражало бы пользователя. –

+0

Хорошо, спасибо миллион! – kramer65

Смежные вопросы