diff --git a/templates/zerver/dev_login.html b/templates/zerver/dev_login.html
index a32db335dd..01988ebcf6 100644
--- a/templates/zerver/dev_login.html
+++ b/templates/zerver/dev_login.html
@@ -57,7 +57,13 @@
{% endblock %}
diff --git a/templates/zerver/login.html b/templates/zerver/login.html
index 10ba8c9470..0e4fbe6b93 100644
--- a/templates/zerver/login.html
+++ b/templates/zerver/login.html
@@ -125,7 +125,7 @@
{% if google_auth_enabled %}
-
@@ -134,7 +134,7 @@
{% if github_auth_enabled %}
-
@@ -157,7 +157,13 @@
diff --git a/zerver/tests/test_auth_backends.py b/zerver/tests/test_auth_backends.py
index 43a60a93a9..0f4dd07723 100644
--- a/zerver/tests/test_auth_backends.py
+++ b/zerver/tests/test_auth_backends.py
@@ -642,6 +642,12 @@ class GitHubAuthBackendTest(ZulipTestCase):
self.assertIn('is_signup=0', result.url)
self.assertIn('image_path', result.url)
+ result = self.client_get('/accounts/login/social/github',
+ {'next': '/#narrow/stream/7-test-here'})
+ self.assertIn(reverse('social:begin', args=['github']), result.url)
+ self.assertIn('is_signup=0', result.url)
+ self.assertIn('narrow', result.url)
+
def test_signup_url(self) -> None:
result = self.client_get('/accounts/register/social/github')
self.assertIn(reverse('social:begin', args=['github']), result.url)
@@ -830,6 +836,10 @@ class GoogleSubdomainLoginTest(GoogleOAuthTest):
self.assertEqual(res.status_code, 302)
self.assertEqual(res.url, 'http://zulip.testserver/user_uploads/path_to_image')
+ res = test_redirect_to_next_url('/#narrow/stream/7-test-here')
+ self.assertEqual(res.status_code, 302)
+ self.assertEqual(res.url, 'http://zulip.testserver/#narrow/stream/7-test-here')
+
def test_log_into_subdomain(self) -> None:
data = {'name': 'Full Name',
'email': self.example_email("hamlet"),
@@ -1507,6 +1517,14 @@ class TestDevAuthBackend(ZulipTestCase):
self.assertEqual(res.status_code, 302)
self.assertEqual(res.url, 'http://zulip.testserver/user_uploads/path_to_image')
+ # In local Email based authentication we never make browser send the hash
+ # to the backend. Rather we depend upon the browser's behaviour of persisting
+ # hash anchors in between redirect requests. See below stackoverflow conversation
+ # https://stackoverflow.com/questions/5283395/url-hash-is-persisting-between-redirects
+ res = do_local_login('/accounts/login/local/?next=#narrow/stream/7-test-here')
+ self.assertEqual(res.status_code, 302)
+ self.assertEqual(res.url, 'http://zulip.testserver')
+
def test_login_with_subdomain(self) -> None:
user_profile = self.example_user('hamlet')
email = user_profile.email