php - standard - Ejemplo de gestión de usuario simple para Google App Engine?
gcloud app engine yaml (3)
No escribe la gestión y el registro de usuarios y todo eso, porque utiliza los servicios de autenticación propios de Google. Todo esto está incluido en la documentación de App Engine.
Soy novato en Google App Engine. Mientras estaba en el tutorial, encontré varias cosas que hacemos en php-mysql que no están disponibles en GAE. Por ejemplo, en la función de incremento automático de dataStore no está disponible. También estoy confundido acerca de la gestión de sesiones en GAE. Sobre todo estoy confundido y no puedo visualizarlo todo.
Aconséjeme un simple sistema de administración de usuarios con registro de usuarios, inicio de sesión de usuarios, cierre de sesión de usuarios, sesión (crear, administrar, destruir) con Data Store. También, por favor, dime dónde puedo obtener ejemplos simples pero efectivos.
Gracias por adelantado.
Tiendo a usar mi propio usuario y gestión de sesiones.
Para mis manejadores web, adjuntaré un decorador llamado session
y uno llamado authorize
. El decorador de la session
adjuntará una sesión a cada solicitud y el decorador authorize
se asegurará de que el usuario esté autorizado.
(Una advertencia, el decorador autorizado es específico de cómo desarrollo mis aplicaciones: el nombre de usuario es el primer parámetro en la mayoría de las solicitudes).
Así, por ejemplo, un controlador web puede tener el siguiente aspecto:
class UserProfile(webapp.RequestHandler):
@session
@authorize
def get(self, user):
# Do some funky stuff
# The session is attached to the self object.
someObjectAttachedToSession = self.SessionObj.SomeStuff
self.response.out.write("hello %s" % user)
En el código anterior, el decorador de session
adjunta algunas cosas de sesión que necesito en función de las cookies que están presentes en la solicitud. El encabezado de authorize
se asegurará de que el usuario solo pueda acceder a la página si la sesión es la correcta.
El código de decoradores está abajo:
import functools
from model import Session
import logging
def authorize(redirectTo = "/"):
def factory(method):
''Ensures that when an auth cookie is presented to the request that is is valid''
@functools.wraps(method)
def wrapper(self, *args, **kwargs):
#Get the session parameters
auth_id = self.request.cookies.get(''auth_id'', '''')
session_id = self.request.cookies.get(''session_id'', '''')
#Check the db for the session
session = Session.GetSession(session_id, auth_id)
if session is None:
self.redirect(redirectTo)
return
else:
if session.settings is None:
self.redirect(redirectTo)
return
username = session.settings.key().name()
if len(args) > 0:
if username != args[0]:
# The user is allowed to view this page.
self.redirect(redirectTo)
return
result = method(self, *args, **kwargs)
return result
return wrapper
return factory
def session(method):
''Ensures that the sessions object (if it exists) is attached to the request.''
@functools.wraps(method)
def wrapper(self, *args, **kwargs):
#Get the session parameters
auth_id = self.request.cookies.get(''auth_id'', '''')
session_id = self.request.cookies.get(''session_id'', '''')
#Check the db for the session
session = Session.GetSession(session_id, auth_id)
if session is None:
session = Session()
session.session_id = Session.MakeId()
session.auth_token = Session.MakeId()
session.put()
# Attach the session to the method
self.SessionObj = session
#Call the handler.
result = method(self, *args, **kwargs)
self.response.headers.add_header(''Set-Cookie'', ''auth_id=%s; path=/; HttpOnly'' % str(session.auth_token))
self.response.headers.add_header(''Set-Cookie'', ''session_id=%s; path=/; HttpOnly'' % str(session.session_id))
return result
return wrapper
def redirect(method, redirect = "/user/"):
''When a known user is logged in redirect them to their home page''
@functools.wraps(method)
def wrapper(self, *args, **kwargs):
try:
if self.SessionObj is not None:
if self.SessionObj.settings is not None:
# Check that the session is correct
username = self.SessionObj.settings.key().name()
self.redirect(redirect + username)
return
except:
pass
return method(self, *args, **kwargs)
return wrapper
Django es su mejor apuesta: con la versión que le indiqué, autenticación y sesiones deberían "funcionar" según la documentación de Django. Este artículo da instrucciones simples y un ejemplo de cómo proceder desde allí.
Para las sesiones de Django, ver here ; para Django auth, here .