使用GAE用户服务-不能“以不同用户”登录



我使用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帐户"登录页面…因此,用户永远没有机会以不同的用户登录。

任何想法?

我能想到的最好的是;你可以尝试显示一个链接到/_ah/login_required,这将触发OpenID登录页面,(希望)还包含一个"作为其他人登录"按钮。

这并不能完全解决问题,因为多个openid提供程序使问题更加复杂。

强制某人退出提供商的网站是不可能的。

创建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每当您想要某人被提示登录(或'这不是我'页面)

相关内容

  • 没有找到相关文章

最新更新