Я играл с Библиотекой JanRain OpenID PHP, главным образом после наряду с учебным руководством, которое я нашел на 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
изменения.
Просматривая код, я думаю, что вам нужен $ oid_response-> identity_url
. Для меня (хотя и в DotNetOpenAuth, а не в php-openid) это возвращается как
https://www.google.com/accounts/o8/id?id=AItOawmqjknrgk6f9cNdPIVxW43GewJPa1ZW4GE
от Google, где ID и часть воспроизводятся надеюсь, уникальный для меня. Однако я не оставил несколько часов, чтобы увидеть, изменится ли это, поэтому извиняюсь, если это то, что у вас уже было от getDisplayIdentifier - но, просматривая источник, похоже, что он просто использовал бы первую часть, но тогда я не Эксперт по PHP.
Почему бы просто не использовать URL-адрес OpenID для идентификации пользователей? Считайте его уникальным, как адрес электронной почты.