Мне было дано задание реализовать «Аутентификацию пользователя через учетную запись Google Apps» в нашем настраиваемом веб-приложении php. Пользователь должен иметь возможность авторизоваться как напрямую, так и через аккаунт Google.
Я пытаюсь использовать openID для этого. Я прочитал об openID и нашел следующее:
В нашей существующей таблице пользователей мы добавим другое поле «openid_identity». При входе мы отправим Google логин и пароль в Google и получим ответ. Из ответа мы получим идентификатор пользователя, а затем, сопоставив его с идентификатором в базе данных, мы сможем получить данные пользователя.
Одна вещь, которая не ясна:
В нашем приложении администраторы могут создавать пользователей. Затем пользователи могут войти в систему со своим адресом электронной почты (например, [email protected]) и паролем.
Первоначально, перед использованием входа в Google, поле ‘openid_identity’ таблицы нашего пользователя будет пустым. Как мы можем обработать OpenID логин в первый раз? Что мы показываем пользователю? Страница «Зарегистрироваться в Google»? Если пользователь регистрируется с помощью своей почты Google (например, «[email protected]»), как мы можем узнать из какого пользователя он из таблицы пользователей?
Я бы предложил реализовать другую таблицу для обработки внешних методов входа в систему вместо добавления поля в таблицу текущих пользователей. Эти отношения «один ко многим» помогут сделать ваше приложение более гибким: однажды вас могут попросить добавить поддержку входа в Twitter, Github и Facebook.
Я предполагаю, что вы планируете изменить форму входа в систему, чтобы представить различные способы входа, скажем, в классическую форму входа и кнопку «Войти с помощью Google».
Тогда я думаю, что вы должны спланировать этот случай: когда пользователь аутентифицируется с помощью Google, Google Api вернет адрес электронной почты пользователя, и вы проверите таблицу внешнего входа в систему, чтобы убедиться, что запись уже существует.
Если записи нет, вы запускаете процесс подписки пользователя, как обычно, но вы можете предварительно заполнить данные пользователя данными, полученными от Google. Вы сохраните запись как во внешней таблице входа в систему, так и в своей таблице общих пользователей, оставляя их связанными.
Если запись уже существует, вы будете считать пользователя авторизованным. Вам придется немного скорректировать свой текущий процесс аутентификации.
Говоря о гибкости, в конечном итоге, когда вы пишете свой код, вы можете принять во внимание идею, позволяющую каждому пользователю проходить аутентификацию с использованием нескольких учетных записей и нескольких внешних служб.
Я также хотел бы рассмотреть возможность использования этого пакета композитора https://packagist.org/packages/google/apiclient иметь дело с Google Apis
Других решений пока нет …