如何从笔记本访问当前用户/auth_state

Zie*_*elu 6 jupyter-notebook jupyterhub

我正在使用 JupyterHub 和自定义验证器。它使用访问令牌设置 auth_state,然后可以将其复制到pre_spawn_start方法内的环境中,如示例所示:

class MyAuthenticator(Authenticator):
    @gen.coroutine
    def authenticate(self, handler, data=None):
        username = yield identify_user(handler, data)
        upstream_token = yield token_for_user(username)
        return {
            'name': username,
            'auth_state': {
                'upstream_token': upstream_token,
            },
        }

@gen.coroutine
def pre_spawn_start(self, user, spawner):
    """Pass upstream_token to spawner via environment variable"""
    auth_state = yield user.get_auth_state()
    if not auth_state:
        # auth_state not enabled
        return
    spawner.environment['UPSTREAM_TOKEN'] = auth_state['upstream_token']
Run Code Online (Sandbox Code Playgroud)

但是,每个用户只会发生一次。如果我注销并再次登录,则pre_spawn_start不会再次调用,并且旧令牌仍然存在于环境变量中。

是否可以user.get_auth_state()直接从笔记本进行访问,以便我可以确保使用当前令牌,而不是之前设置并存储在环境中?

否则,是否可以强制生成器在注销时停止,以便后续登录将触发pre_spawn_start

小智 -1

似乎这个 c.Authenticator.refresh_pre_spawn = True,正如 Eos Antigen 的建议解决了这个问题:每次您再次登录时,预生成定义的函数都会再次执行。