обработка аутентификации пользователя в настройках flask -bokeh-панели - PullRequest
0 голосов
/ 11 февраля 2020

Я использую панель ноутбука Jupyter, используя панель

panel serve my.ipynb --session-ids external-signed 2  --port 4243 --address 0.0.0.0  --allow-websocket-origin=myHost

Я создал и сохранил свой секрет Bokeh.

Я добавил несколько базовых c аутентификаций uisng flask_httpauth

################# FLASH_login.py
from functools import wraps
from flask import request, Response, redirect, Flask
from bokeh.util import session_id

app = Flask(__name__)
from flask_httpauth import HTTPBasicAuth

auth = HTTPBasicAuth()
@auth.verify_password
def verify_password(username, password):
    if valid_external_logic(username, password):# my logic 
            return True
        else:
            return False


@app.route('/')
@auth.login_required
def redirect_to_bokeh():
    s_id = session_id.generate_session_id() # my secret
    return redirect("http://host:4243 /?bokeh-session-id={}".format(s_id), code=302)

if __name__ == "__main__":
    app.run(host='0.0.0.0',  port=4545) 
 ################ 

Если я запускаю это в командной строке, а затем подключаюсь к браузеру через локальный хост через порт 4545, запрашиваются логин и пароль. Когда они предоставлены правильно, он перенаправляет на домашнюю страницу панели через порт 4243.

Однако, когда я затем нажимаю на «Запущенные приложения» или сразу посещаю hostname:4243/myNotebook, я получаю следующий ответ: 403: No bokeh-session-id provided.

Как обеспечить передачу идентификатора сеанса bokeh и на другие страницы?

Интуитивно я могу создавать другие маршруты и украшать их с помощью

@app.route('/')
@auth.login_required

Однако flask соответствует c структуре файлов Panel. Кроме того, в Panel не удалось найти способ изменить URL-адрес ссылки на приложение.

Как защитить другие страницы с таким же идентификатором сеанса?

...