Google身份验证和iframe

时间:2015-11-05 17:47:13

标签: python-2.7 google-app-engine google-app-engine-python

背景

我有一个基于Python的Google AppEngine应用程序,其中包含几个页面,其中login:required在app.yaml中设置。

我希望能够将此应用置于iframe中。但是,每当用户导航到需要登录的页面并且用户被重定向到Google登录页面时,iframe将变为空白,因为登录页面设置了x-frame-options:DENY标题选项。

问题

有没有办法让Google身份验证使用弹出窗口(比如FaceBooks和Twitters身份验证方案呢?)?

或者,是否可以捕获登录所需的事件,并重定向到我提供的另一个页面,执行一些iframe突破,然后重定向到真正的登录页面?

auth_fail_action不支持自定义重定向网址,还有其他方法吗?

我能想到的唯一其他解决方案是不使用login:required,而是在每个视图(或装饰器)中重新实现相同的逻辑。然而,由于这是相当笨拙并需要大量重写,我宁愿不去这条路。

提前致谢, 埃吉尔

1 个答案:

答案 0 :(得分:0)

不幸的是没有。

根据您的具体需求,您可以在应用中创建一个处理login: required部分的直通网址,然后再加载iframe应用的网页。

类似于此的东西:

<强>的app.yaml

handlers:
- url: /login-check
  script: main.app
  login: required

<强> main.py

import webapp2

class LoginCheckHandler(webapp2.RequestHandler):
    def get(self):
        # If they get here, they have been authorized via google's login page
        webapp2.redirect(self.request.get('redirect_url'), abort=True)

app = webapp2.WSGIApplication([
    ('/login-check', LoginCheckHandler),
], debug=True)

现在,您可以通过$APPENGINE_HOST/login-check?redirect_url=$REAL_PAGE_URL加载主页,这将确保用户首先登录,然后将其重定向到$REAL_PAGE_URL,现在可以将您的应用引擎页面设为iframe。