Puede usar cookies para hacerlo ... Realmente no es tan difícil. Puede usar cookies para rastrear el usuario autenticado y almacenar la clave de sesión en gae datastore.
Hay un ejemplo (Se acaba de mostrar la idea básica, no garantizo el código se puede utilizar directamente)
la tabla de usuario básica:
# simply add an property to store the session key
class User(db.Model):
username = db.StringProperty()
password = db.StringProperty()
session = db.StringProperty()
La función de sesión
# Do the following step:
# 1. make sure user provide correct username and password
# 2. generate a random session key
# 3. store the session key to datastore
# 4. set the session key and user name in cookie
class LoginAPI(Webapp.RequestHandler):
def get(self):
username = self.getVar('username', username)
password = self.getVar('password', password)
user = User.all().filter("username = ", username).get()
password = encrypted_the_password(password) # encrypted your password with your own method!
if user.password == password:
# User login successfually
session = generate_random_session_key() # generate your session key here
user.session = session
user.put()
expires_time = decide_your_expires_time() # decide how long the login session is alive.
cookie_time_format = "%a, %d-%b-%Y %H:%M:%S GMT"
expires_datetime = datetime.datetime.fromtimestamp(expires_time)
# set cookie as session
self.response.headers.add_header("Set-Cookie", "user=%s; expires=%s; path=/" % (user.username,expires_datetime.strftime(cookie_time_format)))
self.response.headers.add_header("Set-Cookie", "session=%s; expires=%s; path=/" % (user.session, expires_datetime.strftime(cookie_time_format)))
else:
#User login failed
pass
La función de cierre de sesión
# Remove the previous cookie info
class LoginAPI(Webapp.RequestHandler):
def get(self):
# remove the cookie
self.response.headers.add_header("Set-Cookie", "user=%s; expires=%s; path=/" % ("",expires_datetime.strftime(cookie_time_format)))
self.response.headers.add_header("Set-Cookie", "session=%s; expires=%s; path=/" % ("", expires_datetime.strftime(cookie_time_format)))
Cuando se requiere la conexión del usuario
# Get the session info from cookie. If the session info match the info stored in datastore
# Then user authenticate successfully.
class SomePage(Webapp.RequestHandler):
def get(self):
# get cookie info
username_from_cookie = self.request.cookies.get("user", "")
session_from_cookie = self.request.cookies.get("session", "")
if username_from_cookie and session_from_cookie:
user = User.all().filter("username = ", username_from_cookie).get()
if user.session == session_from_cookie:
# the user is login correctly
pass
else:
# the user is not login
pass
else:
# the user is not login
pass
Probablemente debería añadir una etiqueta para los que el tiempo de ejecución que está utilizando (Python/Java) para tirar de la gente correcta. Eche un vistazo a los marcos que pueden ayudarlo con el aspecto de la sesión. –
Existen bibliotecas de sesión para App Engine. ¿De qué tiene dudas? –