Google App Engine - Flask 应用程序绕过标准 Google Devserver 上的身份验证
Google App Engine - Flask Application Bypassing Standard Google Auth on Devserver
我是 Flask 的新手,我正在尝试将我的代码组织为一个大型应用程序,以便部署在 Google App Engine 上。我正在使用 Flask-Classy 来帮助将我的应用程序组织到逻辑包中。
应用程序在开发服务器上运行良好,只有一个例外。当我在我的 app.yaml
中设置 login: required
或 login: admin
时(请参阅下面的 app.yaml),应用程序似乎跳过模拟 Google 登录页面并自动登录作为 'test@example.com'.
通常,当 login:required 或登录:在 app.yaml 中设置了管理员时,我希望看到标准的 Google 模拟身份验证表单(如下)。但是,当我将浏览器指向“/”或任何其他 uri 时,我将直接转到相应的页面,而无需通过此表单进行身份验证。
我不确定我错了什么missing/doing。我没有收到任何类型的错误。
下面,我包含了我的应用程序的结构和大部分相关代码,看看是否有人能够指出我在这里做错的任何事情。
/flask_app
/flask_app
/mod_one
/__init__.py
/forms.py
/views.py
/models.py
/mod_two
/__init__.py
/forms.py
/views.py
/models.py
/static
/css
...
/templates
/index.html
...
/__init__.py
/settings.py
/urls.py
/lib
/app.yaml
/appengine_config.py
/main.py
app.yaml
application: flask-app
version: 1
runtime: python27
api_version: 1
threadsafe: yes
default_expiration: "30d"
builtins:
- deferred: on
- admin_redirect: on
handlers:
- url: /css
static_dir: flask_app/static/css
- url: /admin/.*
script: main.app
login: admin
- url: /.*
script: main.app
login: required
appengine_config.py
import sys
import os.path
sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'lib'))
main.py
from flask_app import app
app = app
flask_app/init.py
import os
from flask import Flask
from flask_bootstrap import Bootstrap
from werkzeug.debug import DebuggedApplication
app = Flask(__name__)
if os.getenv('FLASK_CONF') == 'TEST':
app.config.from_object('flask_app.settings.Testing')
elif 'SERVER_SOFTWARE' in os.environ and os.environ['SERVER_SOFTWARE'].startswith('Dev'):
# Development settings
app.config.from_object('flask_app.settings.Development')
app.wsgi_app = DebuggedApplication(app.wsgi_app, evalex=True)
else:
app.config.from_object('flask_app.settings.Production')
# Instantiate Flask-Bootstrap.
Bootstrap(app)
import urls
flask_app/urls.py
from flask import render_template
from flask_app import app
@app.route('/')
def index():
params = {
'page_title': 'Home'
}
return render_template('index.html', **params)
@app.route('/contact')
def contact():
params = {
'page_title': 'Contact'
}
return render_template('contact.html', **params)
@app.route('/about')
def about():
params = {
'page_title': 'About'
}
return render_template('about.html', **params)
# Error handlers
# Handle 404 errors
@app.errorhandler(404)
def page_not_found(e):
return render_template('404.html'), 404
# Handle 500 errors
@app.errorhandler(500)
def server_error(e):
return render_template('500.html'), 500
# Register Flask Classy Classes
import mod_one.views as mod_one
import mod_two.views as mod_two
mod_one.OneView.register(app)
mod_two.TwoView.register(app)
正如@Greg 在对该问题的评论中指出的那样,我已经 'logged in' 到 dev_appserver(这让我很失望,因为我从未看到模拟登录页面)所以身份验证正在进行使用默认 'test@example.com' 用户。
进入 /_ah/login
后,我能够访问模拟登录页面并从那里照常进行。
我是 Flask 的新手,我正在尝试将我的代码组织为一个大型应用程序,以便部署在 Google App Engine 上。我正在使用 Flask-Classy 来帮助将我的应用程序组织到逻辑包中。
应用程序在开发服务器上运行良好,只有一个例外。当我在我的 app.yaml
中设置 login: required
或 login: admin
时(请参阅下面的 app.yaml),应用程序似乎跳过模拟 Google 登录页面并自动登录作为 'test@example.com'.
通常,当 login:required 或登录:在 app.yaml 中设置了管理员时,我希望看到标准的 Google 模拟身份验证表单(如下)。但是,当我将浏览器指向“/”或任何其他 uri 时,我将直接转到相应的页面,而无需通过此表单进行身份验证。
我不确定我错了什么missing/doing。我没有收到任何类型的错误。
下面,我包含了我的应用程序的结构和大部分相关代码,看看是否有人能够指出我在这里做错的任何事情。
/flask_app
/flask_app
/mod_one
/__init__.py
/forms.py
/views.py
/models.py
/mod_two
/__init__.py
/forms.py
/views.py
/models.py
/static
/css
...
/templates
/index.html
...
/__init__.py
/settings.py
/urls.py
/lib
/app.yaml
/appengine_config.py
/main.py
app.yaml
application: flask-app
version: 1
runtime: python27
api_version: 1
threadsafe: yes
default_expiration: "30d"
builtins:
- deferred: on
- admin_redirect: on
handlers:
- url: /css
static_dir: flask_app/static/css
- url: /admin/.*
script: main.app
login: admin
- url: /.*
script: main.app
login: required
appengine_config.py
import sys
import os.path
sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'lib'))
main.py
from flask_app import app
app = app
flask_app/init.py
import os
from flask import Flask
from flask_bootstrap import Bootstrap
from werkzeug.debug import DebuggedApplication
app = Flask(__name__)
if os.getenv('FLASK_CONF') == 'TEST':
app.config.from_object('flask_app.settings.Testing')
elif 'SERVER_SOFTWARE' in os.environ and os.environ['SERVER_SOFTWARE'].startswith('Dev'):
# Development settings
app.config.from_object('flask_app.settings.Development')
app.wsgi_app = DebuggedApplication(app.wsgi_app, evalex=True)
else:
app.config.from_object('flask_app.settings.Production')
# Instantiate Flask-Bootstrap.
Bootstrap(app)
import urls
flask_app/urls.py
from flask import render_template
from flask_app import app
@app.route('/')
def index():
params = {
'page_title': 'Home'
}
return render_template('index.html', **params)
@app.route('/contact')
def contact():
params = {
'page_title': 'Contact'
}
return render_template('contact.html', **params)
@app.route('/about')
def about():
params = {
'page_title': 'About'
}
return render_template('about.html', **params)
# Error handlers
# Handle 404 errors
@app.errorhandler(404)
def page_not_found(e):
return render_template('404.html'), 404
# Handle 500 errors
@app.errorhandler(500)
def server_error(e):
return render_template('500.html'), 500
# Register Flask Classy Classes
import mod_one.views as mod_one
import mod_two.views as mod_two
mod_one.OneView.register(app)
mod_two.TwoView.register(app)
正如@Greg 在对该问题的评论中指出的那样,我已经 'logged in' 到 dev_appserver(这让我很失望,因为我从未看到模拟登录页面)所以身份验证正在进行使用默认 'test@example.com' 用户。
进入 /_ah/login
后,我能够访问模拟登录页面并从那里照常进行。