Я играл с PHP-библиотекой JanRain OpenID, в основном следуя инструкции , которую я нашел в ZendZone .
Как можно отличить пользователей - особенно пользователей Google, которые все используют один и тот же OpenID URL, https://www.google.com/accounts/o8/id?
По сути, я нахожусь в точке, где я могу обнаружить, что у них есть учетная запись OpenID ... что они успешно аутентифицированы ... но мое приложение все еще не знает, кто они; только то, что они заверены.
Чтобы различать пользователей, в руководстве используется «Простой запрос регистрации», чтобы запросить электронную почту пользователя у поставщика OpenID, а затем использовать адрес электронной почты, чтобы узнать, является ли это возвращающийся пользователь.
Это не сработало для меня, и , очевидно, не будет работать с некоторыми поставщиками , поэтому я был взволнован, когда наткнулся на функцию getDisplayIdentifier
.
require_once "Auth/OpenID/Consumer.php";
require_once "Auth/OpenID/FileStore.php";
// create file storage area for OpenID data
$store = new Auth_OpenID_FileStore('/wtv');
$consumer = new Auth_OpenID_Consumer($store);
$oid_response = $consumer->complete("http://example.com/oir_return");
if ($oid_response->status == Auth_OpenID_SUCCESS) {
$hopefullyUniqueUserID = $oid_response->getDisplayIdentifier(); // I assumed this would be a relatively permanent way to identify the user...
// I was wrong.
}
К сожалению, через пару часов значение, возвращаемое getDisplayIdentifier
, изменится.