Это вопрос базы данных. У меня уже установлена и работает библиотека openid.
Я хочу использовать OpenID на веб-сайте, над которым я работаю. Существует три типа пользователей.
- Именованные учетные записи, использующие электронную почту / пароль для аутентификации
- Именованные учетные записи, использующие OpenID для аутентификации
- Анонимный аккаунт, использующий OpenID для аутентификации
Все эти пользователи хранятся в одной таблице и просто в таблице комментариев. Именованные учетные записи связаны с блогом, которым может управлять учетная запись. Анонимные пользователи могут комментировать статьи в блоге, но больше ничего не могут делать. Если анонимный пользователь регистрируется в учетной записи, я хочу автоматически перенести старые комментарии этого пользователя в указанную учетную запись. В настоящее время я делаю это, предлагая пользователям заполнить форму с уникальным именем и действительным адресом электронной почты.
В настоящее время оба набора учетных записей хранятся в одной таблице с использованием следующей схемы. (Да, это рельсовая миграция)
create_table :users do |t|
t.string :name #unique because it maps to a subdomain
t.string :openid_url #unique
t.string :email #unique
t.string :password_hash
t.string :password_salt
t.boolean :guest #Anonymous user flag
t.timestamps
end
(openid_url
уникален для предотвращения привязки нескольких учетных записей к одному и тому же openid. email
уникален, поскольку пользователи входят в систему с помощью электронной почты / пароля)
Я использую эту настройку. У меня возникла проблема с реализацией Google OpenID. Каждый пользователь, использующий Google для OpenID, имеет одинаковый URL: https://www.google.com/accounts/o8/ud.
Как мне поддержать использование Google в качестве поставщика openid, поскольку его URL-адреса не являются уникальными для каждого пользователя? (Пожалуйста, запомните существующие ограничения)
Примечание. Учетные записи Google могут использовать любой действующий адрес электронной почты в Интернете, поэтому я не могу просто сохранить person@google.com в поле openid_url, так как это может быть person@example.com или хуже person@yahoo.com! Yahoo также использует этот метод с одним URL, поэтому я тоже должен их поддерживать.