我正在使用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”登录页面上......所以用户永远都没有机会登录作为不同的用户。
有什么想法吗?
答案 0 :(得分:2)
我能想到的最好的是;您可以尝试显示指向/_ah/login_required
的链接,该链接将触发OpenID登录页面,并且(希望)还包含“以其他人身份登录”按钮。
这并没有完全解决问题,因为多个openid提供商使问题变得复杂。
不可能强迫某人退出其提供者的网站AFAIK。
创建login / this-is-not-me页面的完整示例:
app.yaml
- url: /_ah/login_required
script: app.py
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')))
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