При входе в систему (путем нажатия на URL-адрес, генерируемый create_login_url()
), cookie, содержащий идентифицирующую информацию пользователя, готовят и нажимают на стороне клиента, а затем используются в последующих запросах до тех пор, пока пользователь не выйдет из системы или срок действия файла cookie не истечет. Вызов get_current_user()
просто проверяет наличие/информацию о файлах cookie и отвечает соответственно.
На сервере разработки файл cookie имеет имя dev_appserver_login
. Я больше не могу проверять имя файла cookie в GAE, поскольку я перешел от API-интерфейсов пользователей.
Фактическая обработка печенья, кажется, происходит где-то на внутреннем интерфейсе сервиса пользователей, например, глядя на google/appengine/api/users.py
файл в питона SDK:
def create_login_url(dest_url=None, _auth_domain=None,
federated_identity=None):
...
req = user_service_pb.CreateLoginURLRequest()
resp = user_service_pb.CreateLoginURLResponse()
try:
apiproxy_stub_map.MakeSyncCall('user', 'CreateLoginURL', req, resp)
...
конечной точки (по крайней мере, для развития сервер) кажется как-то где-то в google/appengine/tools/appengine_rpc.py
, например:
@staticmethod
def _CreateDevAppServerCookieData(email, admin):
"""Creates cookie payload data.
Args:
email: The user's email address.
admin: True if the user is an admin; False otherwise.
Returns:
String containing the cookie payload.
"""
if email:
user_id_digest = hashlib.md5(email.lower()).digest()
user_id = "1" + "".join(["%02d" % ord(x) for x in user_id_digest])[:20]
else:
user_id = ""
return "%s:%s:%s" % (email, bool(admin), user_id)
def _DevAppServerAuthenticate(self):
"""Authenticates the user on the dev_appserver."""
credentials = self.auth_function()
value = self._CreateDevAppServerCookieData(credentials[0], True)
self.extra_headers["Cookie"] = ('dev_appserver_login="%s"; Path=/;' % value)
Вау, почему нисходящий? Если у меня проблема, и я не могу найти ответ, могу ли я не зайти на этот сайт за помощью? Разве это не вся причина, почему этот сайт существует? – bgenchel