From 5a10d304c92ebcbb76d9b7970b20e9f70a46d050 Mon Sep 17 00:00:00 2001 From: Dara Adib Date: Wed, 2 Mar 2016 16:55:33 -0800 Subject: [PATCH] Redirect user to login page when not logged in --- jupyterhub/handlers/base.py | 10 +++++++++- jupyterhub/tests/test_pages.py | 10 +++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/jupyterhub/handlers/base.py b/jupyterhub/handlers/base.py index 17142658..3cb742f3 100644 --- a/jupyterhub/handlers/base.py +++ b/jupyterhub/handlers/base.py @@ -461,6 +461,7 @@ class UserSpawnHandler(BaseHandler): redirect her to /user/alice/notebooks/mynotebook.ipynb, which should in turn call this function. """ + @gen.coroutine def get(self, name, user_path): current_user = self.get_current_user() @@ -488,11 +489,18 @@ class UserSpawnHandler(BaseHandler): if self.use_subdomains: target = current_user.host + target self.redirect(target) - else: + elif current_user: # logged in as a different user, redirect target = url_path_join(self.base_url, 'user', current_user.name, user_path or '') self.redirect(target) + else: + # not logged in, clear any cookies and reload + self.clear_login_cookie() + self.redirect(url_concat( + self.settings['login_url'], + {'next': self.request.uri}, + )) class CSPReportHandler(BaseHandler): diff --git a/jupyterhub/tests/test_pages.py b/jupyterhub/tests/test_pages.py index ff8c0c7b..c4a6957b 100644 --- a/jupyterhub/tests/test_pages.py +++ b/jupyterhub/tests/test_pages.py @@ -1,6 +1,6 @@ """Tests for HTML pages""" -from urllib.parse import urlparse +from urllib.parse import urlencode, urlparse import requests @@ -165,6 +165,14 @@ def test_user_redirect(app): path = urlparse(r.url).path assert path == '/user/%s/test.ipynb' % name + r = get_page('/user/baduser/test.ipynb', app) + r.raise_for_status() + print(urlparse(r.url)) + path = urlparse(r.url).path + assert path == '/hub/login' + query = urlparse(r.url).query + assert query == urlencode({'next': '/hub/user/baduser/test.ipynb'}) + def test_static_files(app): base_url = ujoin(public_url(app), app.hub.server.base_url)