2014-10-13 1 views
4

У меня была задана задача «Аутентификация пользователя через учетную запись Google Apps» в нашем пользовательском веб-приложении php. Пользователь должен иметь возможность входа в систему как напрямую, так и с помощью учетной записи google.Реализация OpenID в пользовательском приложении PHP

Я пытаюсь использовать openID для этого. Я прочитал про openID и нашел следующее:

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

Единственное, что не понятно:

В нашем приложении, администраторы могут создавать пользователей. Затем пользователи могут войти в систему с помощью своего электронного письма (например, [email protected]) и пароля.

Изначально перед использованием входа в Google поле пользователя 'openid_identity' нашего пользователя будет пустым. Как мы можем в первый раз обрабатывать логин OpenID? Что мы показываем пользователю? Страница «Регистрация с Google»? Если пользователь регистрируется со своей почтой Google (например, «[email protected]»), как узнать, какой пользователь он есть, из таблицы пользователей?

+0

Я думаю, вы не сможете реализовать при использовании OpenID создается администратором – Vickrant

ответ

0

Я бы предложил реализовать другую таблицу для обработки внешних методов входа вместо добавления поля в текущую таблицу пользователей. Это отношение «один-ко-многим» поможет сделать ваше приложение более гибким: однажды вам может быть предложено добавить поддержку для Twitter, Github, Facebook, также.

Я предполагаю, что вы планируете изменить свою форму входа, чтобы представить различные методы входа, скажем, классическую форму входа в систему и кнопку «Войти с Google».

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

Если нет записи, вы начинаете процесс подписки на подписку как обычно, но вы можете предварительно заполнить данные пользователя тем, что у вас есть в Google. Вы сохраните как запись во внешней таблице входа, так и в своей таблице общих пользователей, которая будет связана с ними.

Если запись уже есть, вы будете рассматривать пользователя как авторизованный. Вам придется немного настроить текущий процесс проверки подлинности.

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

Я бы также рассмотреть возможность использования этого композитора пакет https://packagist.org/packages/google/apiclient иметь дело с Apis Google,

+0

OK. Благодарю. Одна вещь: Перед тем, как внедрить google login, у нас есть 3 пользователя в нашей таблице пользователей с электронными адресами: [email protected], [email protected] и [email protected] Затем мы внедрили логин с Google. Теперь Джон хочет войти в свою учетную запись google. Во-первых, нам нужно реализовать процесс подписки для Джона, поскольку таблица «externallogin» пуста. Для подписки Джон использовал свою почту Google, скажем, [email protected] Затем, в этот момент, мы добавим запись в таблицу «externallogin». Но в существующей таблице пользователей, с кем мы будем прикреплять эту запись? Джон, Сид или Риз? –

+0

Можете ли вы предложить некоторое решение для этого? Это слишком срочно для меня. –

+0

Ваша проблема заключается в том, что вы не указали политику для процесса аутентификации. Я имею в виду, что вы хотите в каждой ситуации? Пример. Если вы хотите совместить внешний вход с вашими текущими пользователями, чем единственный вариант, который у вас есть, это разрешить первую проверку подлинности Google только тем пользователям, которые уже вошли в систему, чтобы вы могли привязать [email protected] к john @ myapp.com. С этого момента он может войти в систему как [email protected] (традиционный путь) или как [email protected] (Google Auth) – damko