我正在构建groupon-y服务来学习应用引擎。我想跟踪登录该网站的帐户列表(使用Google身份验证)。什么是最好的方法来做到这一点?由于我使用谷歌身份验证,因此没有单一时间点他们'注册';他们可以在任何网址登录。在appengine中登录track
这里是我试过:
- 在那做了get_or_insert
- 我想我可以继承@login_required每一个请求处理程序的开始force_login功能,但我仍然必须记住装饰我所有的请求处理程序
是不是有办法在登录后立即挂钩并注册一些逻辑?
我正在构建groupon-y服务来学习应用引擎。我想跟踪登录该网站的帐户列表(使用Google身份验证)。什么是最好的方法来做到这一点?由于我使用谷歌身份验证,因此没有单一时间点他们'注册';他们可以在任何网址登录。在appengine中登录track
这里是我试过:
是不是有办法在登录后立即挂钩并注册一些逻辑?
没有登录,但如你所说后立即执行代码,记得要做到在每一个处理程序的开始,或者在每个处理程序中一个装饰的方式。装饰者听起来像一个更好的选择。
你可以使用装饰器 - 你必须记得把它放在任何需要登录的处理器的前面 - 或者你可以在你的所有处理器扩展的基本RequestHandler中完成(我的个人偏好),或者你可以编写一些WSGI中间件。随你便。
你会如何写一个装饰?
有得 [RequiresAuthentication]
在.NET MVC相似?
class Importer(webapp.RequestHandler):
@RequiresAuthentication
def get(self):
pass
def RequiresAuthentication(fn):
def authorize(self):
if not users.get_current_user():
self.redirect(users.create_login_url(self.request.uri))
else:
return fn(self)
return authorize
我刚才在测试应用程序中测试过,它似乎工作。
看着@login_required之后,它不适合岗位工作:
def login_required(handler_method):
"""A decorator to require that a user be logged in to access a handler.
To use it, decorate your get() method like this:
@login_required
def get(self):
user = users.get_current_user(self)
self.response.out.write('Hello, ' + user.nickname())
We will redirect to a login page if the user is not logged in. We always
redirect to the request URI, and Google Accounts only redirects back as a GET
request, so this should not be used for POSTs.
"""
def check_login(self, *args):
if self.request.method != 'GET':
raise webapp.Error('The check_login decorator can only be used for GET '
'requests')
user = users.get_current_user()
if not user:
self.redirect(users.create_login_url(self.request.uri))
return
else:
handler_method(self, *args)
return check_login
我没有读您的文章。我刚刚实施了@login_required – DerpDerp 2011-02-12 05:37:46