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