Как я могу объединить несколько вариантов регистрации Facebook Twitter OpenID - PullRequest
9 голосов
/ 20 сентября 2011

Я хочу создать систему входа в систему с использованием JavaScript и PHP, которая позволит пользователям использовать существующие учетные записи для входа на мой сайт.

Они должны иметь возможность использовать хотя бы эти учетные записи ...

  • Facebook
  • Twitter
  • Google
  • Yahoo
  • OpenID

плюс возможность создать учетную запись на моем сайте, если у них нет логина выше.

Ниже я видел все эти услуги, которые предлагают то, что я хочу сделать,

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

Так кто-нибудь знает, существует ли проект с открытым исходным кодом, который может с этим справиться, или указывает мне, как мне это создать? (Я умею делать PHP и javascript, поэтому спрашиваю больше о теории дизайна / ходе проекта, а не о том, как его кодировать)

Я знаю, что могут быть похожие вопросы, но я не нашел того, что ищу.

Ответы [ 3 ]

4 голосов
/ 20 сентября 2011

К сожалению, не все так просто. Я не знаю ни одной существующей библиотеки, поэтому вот несколько мыслей о том, что нужно сделать. Я собираюсь предположить, что вы хотите создать проект с открытым исходным кодом - если это не так, игнорируйте части, касающиеся других возможных пользователей вашего проекта.

Протоколы

И Google, и Yahoo являются поставщиками OpenID, поэтому вы легко можете получить три пункта из своего списка. Я рекомендую LightOpenID для этого. (дисклеймер: я написал LightOpenID)

Twitter и Facebook используют OAuth, поэтому вам нужно найти подходящую библиотеку, поддерживающую ее.

Интерфейс

Возможно, вы хотите иметь единый интерфейс входа для всех методов. Для этого может быть полезно расширение OpenID Selector .

База данных хранилища

Это самая сложная часть. Вам придется хранить данные аутентификации в какой-то базе данных. Многие люди захотят использовать mysql, некоторые postgresql, а некоторые могут даже захотеть хранить их в текстовых файлах. Даже если вы решите использовать только MySQL, в php есть много адаптеров, и они не являются взаимозаменяемыми. Конечно, для этого вам может потребоваться библиотека, например Doctrine , но, вероятно, она будет на несколько порядков больше, чем ваш проект. И это не будет хорошо интегрироваться с фреймворками.

В зависимости от ваших потребностей, наилучшим решением может быть требование от пользователя реализовать такие функции, как addAccount($type, $login, $password), userAuthenticated($login), checkPassword($login, $password) и т. Д. Это, безусловно, дает наибольшую гибкость пользователю, но требует усилий для начать использовать его.

Я не говорю, конечно, что это решение идеально или даже хорошо для вашего случая - это лучшее, что я могу придумать сейчас.

Интеграция

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

Вот и все. Я не могу думать ни о чем другом прямо сейчас.

3 голосов
/ 09 июня 2013

Посмотрите на HybridAuth (http://hybridauth.sourceforge.net/).. Я еще не начал свою работу, но серьезно, учитывая это приближение

0 голосов
/ 20 сентября 2011

Простой способ (тот, который вам не нужен, я думаю):

Кнопка входа в Facebook: http://developers.facebook.com/docs/reference/plugins/login/
Вход в Twitter: https://dev.twitter.com/docs/auth/sign-in-with-twitter

Остальное тоже легко найти в Google, на это ушло ровно две минуты.

Немного сложнее, скачайте PHP-библиотеки, такие как Facebook-php5, twitter-lib и т. Д., И выполните аутентификацию на основе OAuth изваш сервер и сохраните маркер доступа как «пользователь» в вашей системе.Я сделал это в какой-то системе один раз, и она довольно полезна и проста, как только вы ее освоите:)

Shai.

...