From c72d5a1385bc7df925fe26eb362ab6988711982a Mon Sep 17 00:00:00 2001 From: Kostas Papadimitriou Date: Fri, 14 Dec 2012 15:28:29 +0200 Subject: [PATCH] Remember last login method when multiple login methods are enabled in settings only the primary one is visible by default in the login page. Keeping last successful login method in a cookie allows us to override that behaviour and improve user experience for users that login using secondary login methods. --- snf-astakos-app/astakos/im/context_processors.py | 2 ++ snf-astakos-app/astakos/im/synnefo_settings.py | 1 + snf-astakos-app/astakos/im/target/local.py | 1 + snf-astakos-app/astakos/im/target/shibboleth.py | 4 +++- snf-astakos-app/astakos/im/target/twitter.py | 4 +++- snf-astakos-app/astakos/im/templates/im/login_base.html | 5 +++-- 6 files changed, 13 insertions(+), 4 deletions(-) diff --git a/snf-astakos-app/astakos/im/context_processors.py b/snf-astakos-app/astakos/im/context_processors.py index d2ec1eb..c184414 100644 --- a/snf-astakos-app/astakos/im/context_processors.py +++ b/snf-astakos-app/astakos/im/context_processors.py @@ -64,6 +64,8 @@ def next(request): def code(request): return {'code': request.GET.get('code', '')} +def last_login_method(request): + return {'last_login_method': request.COOKIES.get('astakos_last_login_method', None)} def invitations(request): return {'invitations_enabled': INVITATIONS_ENABLED} diff --git a/snf-astakos-app/astakos/im/synnefo_settings.py b/snf-astakos-app/astakos/im/synnefo_settings.py index f994c44..2b5635f 100644 --- a/snf-astakos-app/astakos/im/synnefo_settings.py +++ b/snf-astakos-app/astakos/im/synnefo_settings.py @@ -60,6 +60,7 @@ context_processors = [ 'astakos.im.context_processors.menu', 'astakos.im.context_processors.custom_messages', 'astakos.im.context_processors.group_kinds', + 'astakos.im.context_processors.last_login_method', 'synnefo.lib.context_processors.cloudbar' ] diff --git a/snf-astakos-app/astakos/im/target/local.py b/snf-astakos-app/astakos/im/target/local.py index 3604830..951e15e 100644 --- a/snf-astakos-app/astakos/im/target/local.py +++ b/snf-astakos-app/astakos/im/target/local.py @@ -119,6 +119,7 @@ def login(request, on_failure='im/login.html'): messages.error(request, _(astakos_messages.AUTH_PROVIDER_ADD_FAILED)) messages.success(request, _(astakos_messages.LOGIN_SUCCESS)) + response.set_cookie('astakos_last_login_method', 'local') return response diff --git a/snf-astakos-app/astakos/im/target/shibboleth.py b/snf-astakos-app/astakos/im/target/shibboleth.py index e388e42..9be15ae 100644 --- a/snf-astakos-app/astakos/im/target/shibboleth.py +++ b/snf-astakos-app/astakos/im/target/shibboleth.py @@ -134,10 +134,12 @@ def login( ) if user.is_active: # authenticate user - return prepare_response(request, + response = prepare_response(request, user, request.GET.get('next'), 'renew' in request.GET) + response.set_cookie('astakos_last_login_method', 'local') + return response else: message = user.get_inactive_message() messages.error(request, message) diff --git a/snf-astakos-app/astakos/im/target/twitter.py b/snf-astakos-app/astakos/im/target/twitter.py index 0b07920..4acf2cf 100644 --- a/snf-astakos-app/astakos/im/target/twitter.py +++ b/snf-astakos-app/astakos/im/target/twitter.py @@ -145,10 +145,12 @@ def authenticated( ) if user.is_active: # authenticate user - return prepare_response(request, + response = prepare_response(request, user, request.GET.get('next'), 'renew' in request.GET) + response.set_cookie('astakos_last_login_method', 'twitter') + return response else: message = user.get_inactive_message() messages.error(request, message) diff --git a/snf-astakos-app/astakos/im/templates/im/login_base.html b/snf-astakos-app/astakos/im/templates/im/login_base.html index a8732b5..4a3f519 100644 --- a/snf-astakos-app/astakos/im/templates/im/login_base.html +++ b/snf-astakos-app/astakos/im/templates/im/login_base.html @@ -12,13 +12,14 @@

LOGIN - other login methods + other login methods

-