Как определить идентификатор_пользователя на основе адреса электронной почты в App Engine?

В новейшем SDK App Engine (1.2.1) есть вызов API для вычисления идентификатора учетной записи пользователя на основе его адреса электронной почты. (Идентификатор остается прежним, даже если пользователь изменит свой адрес позже.)вопрос об уникальных, непрозрачных идентификаторах пользователей для информации. Однако у меня есть проблема с этим вызовом API.

user_id() работает для вошедших в систему пользователей (т. е. изusers.get_current_user), но это возвращаетNone для объектов, созданныхusers.User() конструктор. ** Что дает?

Например, используя отличныйКонсоль App Engineэтот кодне работает.

>>> import google.appengine.api.users
>>> me = google.appengine.api.users.get_current_user()
>>> me
users.User(email='[email protected]',_user_id='105261964646342707921')
>>> me.user_id()
'105261964646342707921'
>>> somebody = google.appengine.api.users.User('[email protected]')
>>> somebody
users.User(email='[email protected]')
>>>somebody.user_id()
>>> type(somebody.user_id())
<type 'NoneType'>

Я хочу простой способ конвертировать адрес электронной почты в идентификатор пользователя.Как я могу получить этот идентификатор от Google заранее; или если это невозможно, то почему бы и нет?

Редактировать: вот текущее решение.

Спасибо Нику Джонсону за его ответ. Вот его решение в действии:

>>> from google.appengine.ext import db
>>> from google.appengine.api import users
>>> class User(db.Model):
...   user = db.UserProperty(required=True)
...
>>> def email_to_userid(address):
...   """Return a stable user_id string based on an email address, or None if
...   the address is not a valid/existing google account."""
...   u = users.User(address)
...   key = User(user=u).put()
...   obj = User.get(key)
...   return obj.user.user_id()
>>> email_to_userid('[email protected]')
u'105261964646342707921'
>>> email_to_userid('this@is-an-invalid-email-address')
>>> email_to_userid('this@is-an-invalid-email-address') is None
True

Ответы на вопрос(2)

Ваш ответ на вопрос