Python Dash Basic Auth - 在应用程序中获取用户名

标签 python authentication web-applications callback plotly-dash

我目前正在制作一个 Dash 应用程序,它会根据用户权限显示不同的布局,因此我希望能够识别已注册的用户。我正在使用 Basic Auth 并更改了 dash_auth/basic_auth.py 中的一些行: 原文:

username_password_utf8 = username_password.decode('utf-8')
username, password = username_password_utf8.split(':')

到:

username_password_utf8 = username_password.decode('utf-8')
username, password = username_password_utf8.split(':')
self._username = username

不幸的是,当我尝试使用来自 auth 的 _username 属性时,我收到了:AttributeError: 'BasicAuth' object has no attribute '_username' 错误。

app.layout = html.Div(
    html.H3("Hello " + auth._username)
)

我知道 Dash 应用程序在授权检查之前已经处理过,但我不知道在哪里实现根据用户名更改布局的回调。如何获取 Dash 应用程序中的用户名?

最佳答案

基本上,您可以使用 flask.request 来访问授权信息。

这是一个基于 dash authentication documentation 的最小工作示例.

import dash
import dash_auth
import dash_html_components as html
from dash.dependencies import Input, Output
from flask import request

# Keep this out of source code repository - save in a file or a database
VALID_USERNAME_PASSWORD_PAIRS = [
    ['hello', 'world']
]

external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']

app = dash.Dash(__name__, external_stylesheets=external_stylesheets)
auth = dash_auth.BasicAuth(
    app,
    VALID_USERNAME_PASSWORD_PAIRS
)

app.layout = html.Div([

    html.H2(id='show-output', children=''),
    html.Button('press to show username', id='button')

], className='container')

@app.callback(
    Output(component_id='show-output', component_property='children'),
    [Input(component_id='button', component_property='n_clicks')]
)
def update_output_div(n_clicks):
    username = request.authorization['username']
    if n_clicks:
        return username
    else:
        return ''

app.scripts.config.serve_locally = True


if __name__ == '__main__':
    app.run_server(debug=True)

希望对您有所帮助!

关于Python Dash Basic Auth - 在应用程序中获取用户名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51639020/

相关文章:

python - 从 Process() 设置时,全局变量无法正确保存

java - WAR 不会部署到 Tomcat 7.0.19

python - App Engine MySQL 连接到远程数据库失败

python - 打印当前模块名称的函数,当从另一个模块调用时也是如此

iphone - 我的服务器如何安全地验证 iPhone 应用内购买?

loops - AWS 登录循环 - 无法访问门户

python - 有没有办法制作多人骰子游戏,让玩家轮流掷骰子并计算分数?

python - 更改 pandas.MultiIndex 的顺序

typescript - 如何使用 Superlogin、ionic3、PouchDB 和 CouchDB 在前端实现 Superlogin-Client 身份验证?

javascript - 何时在 AngularJS Web 应用程序中使用 $scope?