如何在不使用iframe的情况下结合Dash和Flask登录?

时间:2019-09-10 14:44:00

标签: python flask plotly-dash flask-login

我有一个Flask应用程序,该应用程序的某些页面受Flask-Login保护,我需要在应用程序中添加Dash图,该图应位于需要验证的页面上。除了Flask登录之外,我还应该添加其他信息:我使用flask会话创建了用户访问权限级别。

我找到了如何使用iframe块将Dash与受保护页面结合起来,但是我想尝试通过用户身份验证将破折号绘制为单独的页面(不是iframe)。如果忘记了身份验证,那么我就没必要在Flask应用程序中将Dash图添加为单独的页面。

通常,我执行以下操作来检查登录名:

@app.route("/somempage", methods=["GET", "POST"])
@flask_login.login_required
def return_somepage():
    active_username = session['user_id']
    try:
        HOST, USER, PASSWORD, AUTH_PLUGIN = 
        InitSetup.read_mysql_init_config_file(WORKDIR +
        os.path.join(os.getcwd(), "mosreg_webscrap_website.config.txt"))
        conn, curs = MySQLOP.create_mysql_connection(HOST, USER, PASSWORD, 
        AUTH_PLUGIN)
        active_user = MySQLOP.retrieve_userinfo_from_db(curs, 
        active_username)
#now we check value of db colum and decide if user can see the page:
if active_user[0][4]:
    #show page
else:
    # return user have no rights to see the page template

2 个答案:

答案 0 :(得分:1)

我已经通过使用@login_required和in功能条件来检查用户是否已登录并获得授权来做到这一点。 如果没有,它将把他重定向到登录页面。

@main_bp.route('/', methods=['GET'])
@login_required
def dashboard():
    return protected_view()

添加更多详细信息。

## app.py
import flask_login
from flask_login import login_required
from flask_login import LoginManager

login_manager = LoginManager()

app = Flask(__name__, instance_relative_config=False)
login_manager.init_app(app)

with app.app_context():
    # Import parts of our application
    from visual import routes, auth

    # Register Blueprints
    app.register_blueprint(routes.main_bp)
    app.register_blueprint(auth.auth_bp)

    # Create Database Models
    db.create_all()


## routes.py
from flask_login import current_user
from flask import current_app as app
from .assets import compile_auth_assets
from flask_login import login_required

# Blueprint Configuration
main_bp = Blueprint('main_bp', __name__,
                    template_folder='templates',
                    static_folder='static')
compile_auth_assets(app)


@main_bp.route('/', methods=['GET'])
@login_required
def dashboard():
    return protected_view()

本教程应该很有用。 https://scotch.io/tutorials/authentication-and-authorization-with-flask-login

答案 1 :(得分:0)

我使用以下操作成功在自己的仪表板应用程序中添加了@login_required

烧瓶应用程序的__init__.py中

app = Flask(__name__, instance_relative_config=False)

# other stuff ...

@app.route("/dash", methods=['POST','GET'])
@login_required
def dash():
    return appdash.index()

在dashapp.py中

appdash = dash.Dash(__name__, external_stylesheets=external_stylesheets, server=app)

请注意,我没有在Dash应用程序声明中定义路由(即routes_pathname_prefix='/dash'),因此只能通过我放置了@login_required的Flask应用程序的路由来查看Dash App。

@login_requiredFlask tutorial中的那个