diff --git a/common/djangoapps/student/views.py b/common/djangoapps/student/views.py
index 9b0c880e3e..6d5f33758d 100644
--- a/common/djangoapps/student/views.py
+++ b/common/djangoapps/student/views.py
@@ -883,13 +883,16 @@ def login_user(request, error=""): # pylint: disable-msg=too-many-statements,un
AUDIT_LOG.warning(
u'Login failed - user with username {username} has no social auth with backend_name {backend_name}'.format(
username=username, backend_name=backend_name))
- return JsonResponse({
- "success": False,
- # Translators: provider_name is the name of an external, third-party user authentication service (like
- # Google or LinkedIn).
- "value": _('There is no {platform_name} account associated with your {provider_name} account. Please use your {platform_name} credentials or pick another provider.').format(
- platform_name=settings.PLATFORM_NAME, provider_name=requested_provider.NAME)
- }) # TODO: this should be a status code 401 # pylint: disable=fixme
+ return HttpResponseBadRequest(
+ _("You've successfully logged into your {provider_name} account, but this account "
+ "isn't linked with an {platform_name} account yet. Use your {platform_name} username and "
+ "password to log into {platform_name} below, and then link your {platform_name} account with "
+ "{provider_name} from your dashboard.") + "
" + _("If you don't have an {platform_name} "
+ "account yet, click Register Now at the top of the page.").format(
+ platform_name=settings.PLATFORM_NAME, provider_name=requested_provider.NAME),
+ content_type="text/plain",
+ status=401
+ )
else:
diff --git a/common/djangoapps/third_party_auth/tests/specs/base.py b/common/djangoapps/third_party_auth/tests/specs/base.py
index 0ba253c27e..6d5ec1e353 100644
--- a/common/djangoapps/third_party_auth/tests/specs/base.py
+++ b/common/djangoapps/third_party_auth/tests/specs/base.py
@@ -220,10 +220,8 @@ class IntegrationTest(testutil.TestCase, test.TestCase):
def assert_json_failure_response_is_missing_social_auth(self, response):
"""Asserts failure on /login for missing social auth looks right."""
- self.assertEqual(200, response.status_code) # Yes, it's a 200 even though it's a failure.
- payload = json.loads(response.content)
- self.assertFalse(payload.get('success'))
- self.assertIn('associated with your %s account' % self.PROVIDER_CLASS.NAME, payload.get('value'))
+ self.assertEqual(401, response.status_code)
+ self.assertIn("successfully logged into your %s account, but this account isn't linked" % self.PROVIDER_CLASS.NAME, response.content)
def assert_json_failure_response_is_username_collision(self, response):
"""Asserts the json response indicates a username collision."""
diff --git a/lms/static/sass/multicourse/_account.scss b/lms/static/sass/multicourse/_account.scss
index 00b19e636d..c8e1a6cbd0 100644
--- a/lms/static/sass/multicourse/_account.scss
+++ b/lms/static/sass/multicourse/_account.scss
@@ -610,6 +610,14 @@
display: block;
}
}
+
+ .third-party-signin.message {
+ display: none;
+
+ &.is-shown {
+ display: block;
+ }
+ }
}
}
diff --git a/lms/templates/login.html b/lms/templates/login.html
index 9ab2e0e2fe..3b73266407 100644
--- a/lms/templates/login.html
+++ b/lms/templates/login.html
@@ -46,8 +46,10 @@
toggleSubmitButton(false);
});
- $('#login-form').on('ajax:error', function() {
+ $('#login-form').on('ajax:error', function(event, request, status_string) {
toggleSubmitButton(true);
+ $('.third-party-signin.message').addClass('is-shown').focus();
+ $('.third-party-signin.message .instructions').html(request.responseText);
});
$('#login-form').on('ajax:success', function(event, json, xhr) {
@@ -138,12 +140,16 @@
${_('Please provide the following information to log into your {platform_name} account. Required fields are noted by bold text and an asterisk (*).').format(platform_name=platform_name)}
diff --git a/lms/templates/register.html b/lms/templates/register.html index aa587951f0..365fb17ff5 100644 --- a/lms/templates/register.html +++ b/lms/templates/register.html @@ -146,7 +146,7 @@
## Translators: selected_provider is the name of an external, third-party user authentication service (like Google or LinkedIn).
${_("You've successfully signed in with {selected_provider}.").format(selected_provider='%s' % selected_provider)}
- ${_("Finish your account registration below to start learning.")}
+ ${_("We just need a little more information before you start learning with edX.")}