2010-09-22 60 views
0

我是Google Apps Engine的新手(为其他人开发现有项目),看起来和Django有点不同,就登录而言,登录由Google处理,但我试图让它成为应用程序在登录时为用户创建一个自定义Cookie,但似乎无法找到登录操作的处理程序......我为新手问题表示歉意,但希望如果有人能指出我如何完成正确的方向这个。 (只是在用户登录时调用一个动作)Google Apps Engine/Django在用户登录时调用操作?

我正在看一些教程,像这样:http://www.browse-tutorials.net/tutorial/login-register-logout-python-appengine它基本上说你自己生成链接,因为谷歌处理登录,所以我似乎无法形象解决这个问题。

感谢

+1

我不知道有一个钩子(我不确定没有,因此这不是答案)。不过,我怀疑没有。请注意,您可以在登录完成后控制Google登录页面重定向的位置,以便您可以创建一个可以满足您需要的网址。当然,如果你这样做,那么你也无法阻止用户在其他时间点击该URL。 – 2010-09-22 22:13:13

+0

ahh好吧,这是一个好主意,以及你可以做一个有条件的视图功能,只会在用户登录时执行操作..感谢这是一个有用的提示 – Rick 2010-09-22 22:15:01

+0

我的意思是说,一旦他们登录,他们可能多次故意或意外地访问该URL。如果出于某种原因,您希望仅在每次Google登录时执行此操作一次,则您可能还会执行以Google登录名设置的ACSID Cookie的存在为条件的内容。不知道这是否有文件记录/保证,或者不知道是否有正式方式挂断Google会话。 – 2010-09-22 22:21:41

回答

0

我使用Django的middleware系统和会议解决了这个问题。我认为使用会话是保证动作只发生在登录(而url可以手动重新加载)的最佳方式。

Django会话不能开箱即用,所以我实现了自己的会话。然而,存在良好的AppEngine特定的实现,因为这文章指出: http://blog.notdot.net/2010/02/Webapps-on-App-Engine-Part-5-Sessions

我实现我的中间件类这个样子,并把它添加到MIDDLEWARE_CLASSES在settings.py:

class LoginManager(object): 
    def process_view(self, request, view_func, view_args, view_kwargs): 
     user = users.get_current_user() 
     if user is not None: 
      marker = Session.get(user.user_id()) 
      if marker is None: 
       login_action() 
       Session.set(user.user_id(), "true") 
相关问题