Remember last login method
authorKostas Papadimitriou <kpap@grnet.gr>
Fri, 14 Dec 2012 13:28:29 +0000 (15:28 +0200)
committerKostas Papadimitriou <kpap@grnet.gr>
Mon, 17 Dec 2012 11:33:44 +0000 (13:33 +0200)
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
snf-astakos-app/astakos/im/synnefo_settings.py
snf-astakos-app/astakos/im/target/local.py
snf-astakos-app/astakos/im/target/shibboleth.py
snf-astakos-app/astakos/im/target/twitter.py
snf-astakos-app/astakos/im/templates/im/login_base.html

index d2ec1eb..c184414 100644 (file)
@@ -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}
index f994c44..2b5635f 100644 (file)
@@ -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'
 ]
 
index 3604830..951e15e 100644 (file)
@@ -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
 
 
index e388e42..9be15ae 100644 (file)
@@ -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)
index 0b07920..4acf2cf 100644 (file)
@@ -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)
index a8732b5..4a3f519 100644 (file)
     <div class="login-section">
 
       <h2 class="clearfix"><span class="title">LOGIN</span> <span class="header-actions">
-          <a class="other-logins" href="#other-login-methods">other login methods</a></span>
+              <a class="other-logins" href="#other-login-methods">other login methods</a></span>
       </h2>
       <div class="main-login-method">
         {% include master_auth_provider.login_template %}
       </div>
 
-    <div class="extralogin" style="display:none">
+      <div class="extralogin" 
+          style="{% if not last_login_method or last_login_method == master_auth_provider.module %}display:none{% endif %}">
       {% for provider in auth_providers %}
       {% if not provider == master_auth_provider %}
         {% include provider.login_prompt_template %}