Я использую панель ноутбука 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-адрес ссылки на приложение.
Как защитить другие страницы с таким же идентификатором сеанса?