【发布时间】:2018-12-19 15:23:14
【问题描述】:
我正在使用带有自定义身份验证器的 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']
但是,每个用户只发生一次。如果我注销并再次登录,则不会再次调用 pre_spawn_start 并且旧令牌仍存在于环境变量中。
是否可以直接从笔记本访问user.get_auth_state(),这样我就可以确保使用当前令牌,而不是之前设置并存储在环境中?
否则,是否可以在注销时强制 spawner 停止,以便后续登录将触发 pre_spawn_start?
【问题讨论】:
-
也许,(只是也许)你可以在配置文件中添加 c.Authenticator.refresh_pre_spawn = True (这就是我在相同的设置和工作中所拥有的)
-
我也有同样的问题。你是如何解决这个问题的?你用了 refresh_user 吗?
标签: jupyter-notebook jupyterhub