使用GAE用户服务 - 无法“以其他用户身份登录”

时间:2011-07-07 07:36:08

标签: python django google-app-engine cookies openid

我正在使用GAE用户服务进行登录/注销机制,使用create_login_url等,一切正常。顺便说一下,我使用的是联合OpenID选项。

但我有一个问题 - 因为用户服务检查user = users.get_current_user()然后如果用户登录到他的Gmail,它会自动将他登录到我的服务中。这没关系,但如果不同的用户想登录怎么办? 如何将用户重定向到“以其他用户身份登录”等页面?

我尝试删除我正在创建的Cookie,并将其删除:

  if not (self.request.cookies.has_key('ACSID')):
        logging.debug('no cookies')
        self.redirect(users.create_login_url(self.request.uri))
        return

然后我看到“没有cookie”的日志,但接下来发生的事情是它将用户登录,而不是将他放在“google accounts”登录页面上......所以用户永远都没有机会登录作为不同的用户。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

我能想到的最好的是;您可以尝试显示指向/_ah/login_required的链接,该链接将触发OpenID登录页面,并且(希望)还包含“以其他人身份登录”按钮。

这并没有完全解决问题,因为多个openid提供商使问题变得复杂。

不可能强迫某人退出其提供者的网站AFAIK。

创建login / this-is-not-me页面的完整示例:

添加app.yaml

的登录路径
- url: /_ah/login_required
  script: app.py

创建一个OpenID登录处理程序以创建相关登录URL

class OpenIDHandler(webapp.RequestHandler):
    def get(self):
        """Begins the OpenID flow/Google Apps discovery"""
        self.redirect(users.create_login_url(
            dest_url='http://yourappid.appspot.com',
            _auth_domain=None,
            federated_identity=self.request.get('domain')))

将一个OpenID处理程序添加到您的wgsi应用程序(可能是main.py):

def main():
    ROUTES = [
        ('/_ah/login_required',      handlers.OpenIDHandler),
    ]
    application = webapp.WSGIApplication(ROUTES, debug=True)
    util.run_wsgi_app(application)
if __name__ == '__main__':
  main()

现在,只要您希望系统提示登录(或“这不是我”页面),您就可以访问/_ah/login_required