Я думаю, вы должны различать два типа пользователей:
1) пользователи, которые вошли в систему через учетные записи Google или уже зарегистрировались на вашем сайте с адресом электронной почты, не принадлежащим Google *
2) пользователи, которые открыли ваш сайт впервые и никоим образом не вошли в систему
Во втором случае я не вижу другого способа, кроме как генерировать некоторую случайную строку (например, с помощью uuid.uuid4()
или из ключа cookie сеанса этого пользователя), поскольку анонимный пользователь не несет никакой уникальной информации с собой.
Для пользователей, которые вошли в систему, однако, у вас уже есть уникальный идентификатор - их адрес электронной почты. Я согласен с вашими вопросами конфиденциальности - вы не должны использовать его в качестве идентификатора. Вместо этого, как насчет генерации строки, которая кажется случайной, но фактически генерируется из адреса электронной почты? Хеш-функции идеально подходят для этой цели. Пример:
>>> import hashlib
>>> email = 'user@host.com'
>>> salt = 'SomeLongStringThatWillBeAppendedToEachEmail'
>>> key = hashlib.sha1('%s$%s' % (email, salt)).hexdigest()
>>> print key
f6cd3459f9a39c97635c652884b3e328f05be0f7
Поскольку hashlib.sha1
не является случайной функцией, но для данных возвращает всегда один и тот же результат, но доказано, что он практически необратим, вы можете смело представлять хешированный ключ на веб-сайте без ущерба для адреса электронной почты пользователя. Кроме того, вы можете смело предположить, что никакие два хэша различных электронных писем не будут одинаковыми (они могут быть, но вероятность этого очень, очень мала). Для получения дополнительной информации о функциях хеширования обратитесь к записи в Википедии .