使用firebase验证烧瓶应用程序中的dash应用程序



我正在使用firebase身份验证来验证我的烧瓶应用程序。这适用于所有烧瓶视图。然而,我无法将其用于仪表板视图。我在下面附上了一个非常简单的没有firebase的最小示例,其中我有一个烧瓶页面hello和一个dashboard页面。我使用decoratorcheck_token()包装视图,该decorator当前只应将所有视图重定向到登录页面。这适用于烧瓶视图/hello/,但不适用于短划线视图dashboard

令人困惑的是,正如print语句所证明的那样,decorator甚至没有为仪表板视图运行。

routes.py

from flask import current_app as app
def check_token(f):
print("RUNNING check_token")
def wrap(*args,**kwargs):
print("RUNNING wrap")
token = request.cookies.get("token")
if not token:
return redirect(url_for('login'))
return f(*args, **kwargs)
wrap.__name__ = f.__name__
return wrap
@app.route('/')
@app.route('/hello')
@check_token
def hello():
return 'hello world!'
@app.route('/login')
def login():
return "This is the login page"
@app.route('/dashboard')
@check_token
def render_dashboard():
return redirect('/dash1')

application.py

from dash import Dash
from werkzeug.middleware.dispatcher import DispatcherMiddleware
from werkzeug.serving import run_simple
import dash_html_components as html
from flask import Flask, request,render_template, url_for, redirect

def init_dash(dash_app1):
dash_app1.layout = html.Div([html.H1('Hi there, I am app1 for dashboards')])
return dash_app1
def init_app():
server = Flask(__name__)
dash_app1 = Dash(__name__, server = server, url_base_pathname='/dashboard/' )
dash_app1 = init_dash(dash_app1)
with server.app_context():
import routes
app = DispatcherMiddleware(server, {
'/dash1': dash_app1.server,
})
return app
if __name__ == "__main__":
run_simple('0.0.0.0', 8090, init_app(), use_reloader=True, use_debugger=True)

任何帮助都将不胜感激!在过去的两天里,我一直在努力争取这项工作

我终于可以使用我从一个不知名的github线程中找到的这个代码片段了

from dash import Dash
from werkzeug.middleware.dispatcher import DispatcherMiddleware
from werkzeug.serving import run_simple
import dash_html_components as html
from flask import Flask, request,render_template, url_for, redirect
from utils import check_token
def protect_views(app,bpn):
for view_func in app.server.view_functions:
print(view_func)
if view_func.startswith(bpn):
app.server.view_functions[view_func] = check_token(app.server.view_functions[view_func])

return app
def init_dash(dash_app1):
dash_app1.layout = html.Div([html.H1('Hi there, I am app1 for dashboards')])
return dash_app1
def init_app():
server = Flask(__name__)
bpn = '/dashboard/'
dash_app1 = Dash(__name__, server = server, url_base_pathname=bpn )
dash_app1 = init_dash(dash_app1)
dash_app1 = protect_views(dash_app1, bpn)
with server.app_context():
# dash_app1 = protect_views(dash_app1)
import routes
app = DispatcherMiddleware(server, {
'/dash1': dash_app1.server,
})
return app
if __name__ == "__main__":
run_simple('0.0.0.0', 8090, init_app(), use_reloader=True, use_debugger=True)

最新更新