Openid Как я могу объединить несколько вариантов регистрации facebook twitter openid


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

Они должны иметь возможность использовать по крайней мере эти учетные записи...

  • Facebook
  • Твиттер
  • Google
  • Yahoo
  • Идентификатор открытия

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

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

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

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

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

Author: Deepak, 2011-09-20

3 answers

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

Протоколы

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

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

Интерфейс

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

Хранилище базы данных

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

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

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

Интеграция

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

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

 4
Author: Mewp, 2011-09-20 16:48:13

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

 3
Author: Kim Ras, 2013-06-09 09:19:43

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

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

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

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

Шай.

 0
Author: Shai Mishali, 2011-09-20 16:21:31