ipyauth с jupyter: обратный вызов Google приводит к несоответствию типов MIME - PullRequest
0 голосов
/ 25 марта 2019

Я пытаюсь запустить ipyauth внутри ноутбука Jupyter, как описано здесь . Однако при нажатии на кнопку «Войти» всплывающее окно не появляется. Вместо этого обратный вызов сталкивается с конфликтами типов MIME.

Две недели назад я смог запустить этот демонстрационный ноутбук , но проблема (не связанная) вынудила меня переустановить ipyauth, и теперь я столкнулся с этой проблемой. Я установил новую среду Anaconda3 и установил ipyauth, как описано в этого руководства . Версия моего ноутбука jupyter 5.7.6, и все необходимые расширения включены, как указано в разделе dev-install .

При открытии консоли после нажатия кнопки «Войти» отображается следующая ошибка:

Script from http://localhost:8888/callback/assets/util.js was blocked due to mime type mismatch

В Firefox консоль также заявляет, что конфликт вызван «text / html». Строки, приведенные в консоли перед несоответствием MIME:

btn_main clicked widget_box.js:84:20
start startAuthFlow widget_auth.js:38:4
name=google, isIframeMode=true widget_auth.js:46:4
paramsModel widget_util.js:4:4
{"name":"google","url_params":{"response_type":"token","client_id":"729266704353-i9eueh2db24if69v2ohj4brfa94c48ns.apps.googleusercontent.com","redirect_uri":"http://localhost:8888/callback/","scope":"profile openid","include_granted_scopes":"false"}} widget_util.js:5:4
paramsFull widget_util.js:4:4
{"name":"google","authorize_endpoint":"https://accounts.google.com/o/oauth2/v2/auth","url_params":{"response_type":"token","redirect_uri":"http://localhost:8888/callback/","client_id":"729266704353-i9eueh2db24if69v2ohj4brfa94c48ns.apps.googleusercontent.com","scope":"profile openid","access_type":"online","state":"google,iframe,fbixswbono","include_granted_scopes":"false","prompt":"none"},"scope_separator":" ","isJWT":false} widget_util.js:5:4
authUrl widget_util.js:4:4
"https://accounts.google.com/o/oauth2/v2/auth?response_type=token&redirect_uri=http%3A%2F%2Flocalhost%3A8888%2Fcallback%2F&client_id=729266704353-i9eueh2db24if69v2ohj4brfa94c48ns.apps.googleusercontent.com&scope=profile%20openid&access_type=online&state=google%2Ciframe%2Cfbixswbono&include_granted_scopes=false&prompt=none" widget_util.js:5:4
start buidReadMessage widget_auth.js:80:4
----------- startAuthFlowInIframe widget_util.js:4:4
undefined widget_util.js:5:4

Кроме этого, ноутбук не реагирует на нажатие кнопки.

Должен ли я что-то изменить в моем конфигурационном файле jupyter? Можно ли как-то выяснить, откуда именно эта ошибка? Это ошибка в ipyauth или я делаю что-то не так?

1 Ответ

0 голосов
/ 25 июня 2019

В текущей версии ipyauth (0.2.5) заголовок Content-Type файлов assets/util.js и assets/main.js не задан.

Исправление для этого - следуйте разделу Dev Install документации, устанавливая все необходимые расширения, но перед тем, как запустить jupyter notebook, чтобы открыть интерфейс ноутбука, измените ipyauth/ipyauth/ipyauth_callback/server_extension.py на

import os
import mimetypes
from notebook.base.handlers import IPythonHandler
from notebook.utils import url_path_join


def load_jupyter_server_extension(nb_app):
    web_app = nb_app.web_app

    web_app.settings['jinja2_env'].loader.searchpath += [
        os.path.join(os.path.dirname(__file__), 'templates'),
        os.path.join(os.path.dirname(__file__), 'templates', 'assets'),
    ]

    class CallbackHandler(IPythonHandler):
        """
        """

        def get(self, path):
            """
            """
            nb_app.log.info("in CallbackHandler with path={}".format(path))
            self.write(self.render_template('index.html'))

    class CallbackAssetsHandler(IPythonHandler):
        """
        """

        def get(self, path):
            """
            """
            nb_app.log.info("in CallbackAssetsHandler with path={}".format(path))
            mime_type, _ = mimetypes.guess_type(path)
            self.set_header('Content-Type', mime_type)
            self.write(self.render_template(path))

    host_pattern = '.*$'
    base_url = web_app.settings['base_url']

    web_app.add_handlers(
        host_pattern,
        [(url_path_join(base_url, '/callback/assets/(.*)'), CallbackAssetsHandler),
        (url_path_join(base_url, '/assets/(.*)'), CallbackAssetsHandler),
        (url_path_join(base_url, '/callback(.*)'), CallbackHandler),
        (url_path_join(base_url, '/callback.html(.*)'), CallbackHandler),
        ]
    )

    nb_app.log.info("ipyauth callback server extension enabled")

Это добавляет правильный Content-Type к этим двум файлам javascript.

Я открою вопрос на репо ipyauth относительно этой проблемы. Надеемся, что в ближайшее время в ветку master будет добавлено более надежное решение, чтобы мы могли использовать этот инструмент в производстве

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...