2

我想找到一种方法来限制视图(请求处理程序)只能从我的视图内而不是 app.yaml 内的 Google App Engine 内部网络中调用。

例如,我有一个视图来处理我的 Flask 应用程序中的入站电子邮件

@app.route('/_ah/mail/notifications@example.appspotmail.com', methods=['POST'])
def inbound_notification_email():
    from google.appengine.api import mail
    message = mail.InboundEmailMessage(request.data)
    ...
    return '' # 200 OK

虽然我知道我可以将所有邮件处理程序放在他们自己的文件/wsgi 实例中,如下所示:

handlers:
- url: /_ah/mail/.+
  script: inbound_mail.app
  login: admin

我宁愿不必这样做,因为我使用的是 Flask 而不是 Webapp。现在,请求就像上面的设置一样工作,但它是公开的。

检查对我的inbound_notification_email()视图的请求,我看到X-App-Country请求标头设置为ZZ,请求的远程地址为0.1.0.20. 我知道 0.xxx IP 范围是 IANA 为本地网络保留的,因此检查 request.remote_address 是否以“0”开头似乎是合乎逻辑的。会起作用,但我不确定 App Engine 中的所有内部请求是否总是以这种方式处理(想到推送队列和 xmpp)。

我惊讶地看到一件事是users.is_current_user_admin()返回 False,inbound_notification_mail()即使您login: admin在使用 Webapp 时进行了设置。

4

0 回答 0