我是 Google App Engine 的新手。在阅读本教程时,我发现我们在 php-mysql 中所做的一些事情在 GAE 中不可用。例如,在 dataStore 中,自动增量功能不可用。我也对 GAE 中的 session 管理感到困惑。总之,我很困惑,无法想象整个事情。
请告诉我一个简单的用户管理系统,包括用户注册、用户登录、用户注销、 session (创建、管理、销毁)与数据存储。另外请告诉我在哪里可以获得简单但有效的示例。
提前致谢。
最佳答案
我倾向于使用自己的用户和 session 管理
对于我的 web 处理程序,我将附加一个名为 session
的装饰器和一个名为 authorize
的装饰器。 session
装饰器将为每个请求附加一个 session ,而 authorize
装饰器将确保用户被授权。
(请注意,授权装饰器特定于我如何开发我的应用程序 - 用户名是大多数请求中的第一个参数)。
例如,一个 web 处理程序可能看起来像:
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)
在上面的代码中,session
装饰器根据请求中存在的 cookie 附加了一些我需要的 session 内容。 authorize
header 将确保用户只有在 session 正确的情况下才能访问该页面。
装饰器代码如下:
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
关于php - Google App Engine 的简单用户管理示例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1030293/