使用login_request将Dash App注册为Flask作为View时,始终返回flask_login.current_user为None

问题描述

我的问题是,烧瓶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 (将#修改为@)