我正在将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()
,以便可以确保使用当前令牌,而不是先前设置并存储在环境中?
否则,是否可以强制使生成器在注销时停止,以便随后的登录将触发pre_spawn_start
?