nativeauthenticator icon indicating copy to clipboard operation
nativeauthenticator copied to clipboard

import_from_firstuse not working: Previous users cannot log in or create an account.

Open mtav opened this issue 2 years ago • 1 comments

Bug description

After setting c.NativeAuthenticator.import_from_firstuse = True and reloading the configuration, the users from firstuse_dbm_path do get added to the new database, but they cannot log in or create a new account.

This is because the hashed password from firstuse_dbm_path is passed to the user creation function as if it were a normal password, leading to a different hash. The user then exists in the new database, preventing them from signing up with the same name. And they cannot sign in because their old password will not match the new hash.

Expected behaviour

All users would be transferred with the same username and password and are able to sign in without having to sign up first.

Actual behaviour

They cannot log in or create a new account with the same username.

How to reproduce

  1. Set up tljh with an admin user and password (randomly chosen here):
curl -L https://tljh.jupyter.org/bootstrap.py \
  | sudo python3 - \
    --admin the_admin:PUYLjBrI5q
  1. Create the file /opt/tljh/config/jupyterhub_config.d/native_auth.py with:
c.JupyterHub.authenticator_class = 'nativeauthenticator.NativeAuthenticator'
c.Authenticator.admin_users = {'the_admin'}
c.NativeAuthenticator.enable_signup = True
c.NativeAuthenticator.import_from_firstuse = True
  1. Reload the hub: sudo tljh-config reload
  2. Try to log in as the_admin with password PUYLjBrI5q or create a new user named the_admin.

Your personal set up

Tested on the-littlest-jupyterhub.

  • OS: Ubuntu 22.04.1 LTS
  • Version(s): JupyterHub version 1.5.0, python 3.10
Full environment
# paste output of `pip freeze` or `conda list` here
Configuration
# jupyterhub_config.py
"""
JupyterHub config for the littlest jupyterhub.
"""

from glob import glob
import os

from tljh import configurer
from tljh.config import INSTALL_PREFIX, USER_ENV_PREFIX, CONFIG_DIR
from tljh.utils import get_plugin_manager
from tljh.user_creating_spawner import UserCreatingSpawner
from jupyterhub_traefik_proxy import TraefikTomlProxy

c.JupyterHub.spawner_class = UserCreatingSpawner

# leave users running when the Hub restarts
c.JupyterHub.cleanup_servers = False

# Use a high port so users can try this on machines with a JupyterHub already present
c.JupyterHub.hub_port = 15001

c.TraefikTomlProxy.should_start = False

dynamic_conf_file_path = os.path.join(INSTALL_PREFIX, "state", "rules", "rules.toml")
c.TraefikTomlProxy.toml_dynamic_config_file = dynamic_conf_file_path
c.JupyterHub.proxy_class = TraefikTomlProxy

c.SystemdSpawner.extra_paths = [os.path.join(USER_ENV_PREFIX, "bin")]
c.SystemdSpawner.default_shell = "/bin/bash"
# Drop the '-singleuser' suffix present in the default template
c.SystemdSpawner.unit_name_template = "jupyter-{USERNAME}"

tljh_config = configurer.load_config()
configurer.apply_config(tljh_config, c)

# Let TLJH hooks modify `c` if they want

# Call our custom configuration plugin
pm = get_plugin_manager()
pm.hook.tljh_custom_jupyterhub_config(c=c)

# Load arbitrary .py config files if they exist.
# This is our escape hatch
extra_configs = sorted(glob(os.path.join(CONFIG_DIR, "jupyterhub_config.d", "*.py")))
for ec in extra_configs:
    load_subconfig(ec)
Logs

mtav avatar Sep 10 '22 04:09 mtav

Thank you for opening your first issue in this project! Engagement like this is essential for open source projects! :hugs:
If you haven't done so already, check out Jupyter's Code of Conduct. Also, please try to follow the issue template as it helps other other community members to contribute more effectively. welcome You can meet the other Jovyans by joining our Discourse forum. There is also an intro thread there where you can stop by and say Hi! :wave:
Welcome to the Jupyter community! :tada:

welcome[bot] avatar Sep 10 '22 04:09 welcome[bot]