问题描述
我的问题是,烧瓶login_manager.current_user在Dash应用程序中始终返回None,但是可以从其他路由成功访问。这是 init .py,用于创建flask服务器并注册Dash视图和其他蓝图:
from dash import Dash
from flask_login import LoginManager,login_required,login_user,current_user
from .routes import main_bp
def construct_dash_app(app,url_base_pathname):
return Dash(__name__,server=app,url_base_pathname=url_base_pathname,Meta_tags=[Meta_viewport],suppress_callback_exceptions = True)
def register_dash_callbacks(dash_app,title,layout,register_func):
dash_app.title = title
dash_app.layout = layout
register_func(dash_app)
def register_dashapps(app):
# Import dash app
from python.fmapp.layout import layout as fm_layout
from python.fmapp.callbacks import register_callbacks as fm_register_callbacks
fmapp = construct_dash_app(app,'/fmapp/')
with app.app_context():
from python import routes
routes.login_manager.init_app(app)
register_dash_callbacks(fmapp,'fmapp',fm_layout,fm_register_callbacks)
app.register_blueprint(routes.main_bp)
for view_name in app.view_functions.keys():
if view_name.startswith(("/fmapp/")):
app.view_functions[view_name] = login_required(app.view_functions[view_name])
def create_app():
LOG.info("Updating flask config.")
app.config.update(
SECRET_KEY = os.urandom(16),# LOGIN_disABLED = os.environ.get("SysLevel","") == "dev"
)
LOG.info("Registering Dash apps.")
register_dash.register_dashapps(app)
LOG.info("Apps successfully created.")
return app
在routes.py中,我还有另一个蓝图和login_manager:
from flask import Blueprint,render_template,escape,url_for,redirect
from flask_login import LoginManager,UserMixin,current_user
main_bp = Blueprint('main_bp',__name__)
login_manager = LoginManager()
@main_bp.route('/',methods=['GET','POST'])
@login_required
def index():
LOG.debug(DEBUG_ROUTE_MSG.format("/"))
return render_template("index.html",title='Home Page')
@main_bp.route('/access_denied')
@login_manager.unauthorized_handler
def unauthorized():
return render_template("access_denied.html",title="Unauthorized Access")
@login_manager.request_loader
def load_user(request):
auth_status = validate_auth(request)
if auth_status[0]:
LOG.debug("User has been authorized")
token = auth_status[1]
user = User(token.get("sub"),token.get("given_name"),token.get("family_name"),token.get("email"),token.get("groups"))
return user
else:
user = User('None','ABC','X','abc_x@gmail.com','user')
LOG.debug("Not auth user!!!!!!!!!!!")
return user
class User(UserMixin):
def __init__(self,user_id,first_name,last_name,email,groups):
self.id = user_id
self.email = email
self.first_name = first_name
self.last_name = last_name
self.full_name = "{} {}".format(first_name,last_name)
self.group= groups
我跳过了可以对用户信息进行解码的身份验证功能。除破折号应用程序外的所有路由都可以为current_user返回正确的值。这就是我在dash callbacks.py
中导入current_user的方式from flask_login import current_user
print('User!!!!!!!!!!!!!!!!!!!!!!!',current_user)
您知道为什么即使我为破折号视图应用login_request达世币也无法获得current_user吗?非常感谢您的所有帮助!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)