我想找到一种方法来限制视图(请求处理程序)只能从我的视图内而不是 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 时进行了设置。