can logout
authorThierry Parmentelat <thierry.parmentelat@inria.fr>
Mon, 10 Dec 2012 17:07:42 +0000 (18:07 +0100)
committerThierry Parmentelat <thierry.parmentelat@inria.fr>
Mon, 10 Dec 2012 17:07:42 +0000 (18:07 +0100)
auth/views.py
myslice/urls.py
slice/views.py
templates/view-logout.html [new file with mode: 0644]
templates/widget-logout.html [new file with mode: 0644]

index 817fb63..f5db82d 100644 (file)
@@ -2,7 +2,7 @@
 from django.core.context_processors import csrf
 from django.template import RequestContext
 from django.shortcuts import render_to_response
-from django.contrib.auth import authenticate, login
+from django.contrib.auth import authenticate, login, logout
 from django.http import HttpResponseRedirect
 
 from auth.backend import MyCustomBackend
@@ -34,3 +34,19 @@ def login_user(request):
         state='Welcome to MySlice'
         env['state']=state; env['username']=''
         return render_to_response('view-login.html',env, context_instance=RequestContext(request))
+
+# hard question : where should we redirect requests to logout if user is not logged in ?
+def logout_user (request):
+    # xxx check that we're indeed logged in
+    if not request.user.is_authenticated():
+        return HttpResponseRedirect ('/')
+    return render_to_response('view-logout.html',{},context_instance=RequestContext(request))
+
+def do_logout_user (request):
+    # xxx check that we're indeed logged in
+    if not request.user.is_authenticated():
+        return HttpResponseRedirect ('/')
+    logout(request)
+    return HttpResponseRedirect ('/')
+        
+
index ab67f55..b4a1b1c 100644 (file)
@@ -20,7 +20,11 @@ urlpatterns = patterns(
     # Uncomment the next line to enable the admin:
     # url(r'^admin/', include(admin.site.urls)),
     (r'^/?$', 'slice.views.fake_slice_view'),
+    # seems to be what login_required uses to redirect ...
+    (r'^accounts/login/$', 'auth.views.login_user'),
     (r'^login/?$', 'auth.views.login_user'),
+    (r'^logout/?$', 'auth.views.logout_user'),
+    (r'^logout/confirm/?$', 'auth.views.do_logout_user'),
     (r'^slice/?$', 'slice.views.fake_slice_view'),
     (r'^slice/(?P<name>[\w\.]+)/?$', 'slice.views.fake_slice_view'),
     (r'^tab/?$', 'slice.views.tab_view'),
index 9bfe1ab..2a1e478 100644 (file)
@@ -14,15 +14,19 @@ Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh
 standard_menu_items = [ { 'label':'Tab view', 'href': '/tab/'},
                         { 'label':'Slice view',  'href': '/slice/'},
                         { 'label':'Scroll view', 'href': '/scroll/'},
-                        { 'label':'Login', 'href':'/login/'},
                         ]
 
-def menu_items (current):
+login_out_items = { False: { 'label':'Login', 'href':'/login/'},
+                    True:  { 'label':'Logout', 'href':'/logout/'}}
+
+def menu_items (current,request=None):
     result=deepcopy(standard_menu_items)
     for d in result:
         if d['label'].lower().find(current)>=0: d['active']=True
+    if not request: return result
+    has_user=request.user.is_authenticated()
+    result.append (login_out_items [ has_user] )
     return result
-    
 
 hard_wired_slice_names = []
 for site in [ 'inria', 'upmc' , 'ibbt' ]:
@@ -36,7 +40,7 @@ def fake_slice_view (request, name=None):
                                'name':name,
                                'slices': hard_wired_slice_names,
                                'content_main' : lorem,
-                               'menu_items' : menu_items('slice'),
+                               'menu_items' : menu_items('slice',request),
                                },
                               context_instance=RequestContext(request))
 
@@ -46,7 +50,7 @@ def fake_slice_view (request, name=None):
 def tab_view (request):
     return render_to_response ('view-tab.html',
                                { 'lorem': lorem,
-                                 'menu_items': menu_items('tab'),
+                                 'menu_items': menu_items('tab',request),
                                  },
                                context_instance=RequestContext(request))
 
@@ -54,6 +58,6 @@ def tab_view (request):
 def scroll_view (request):
     return render_to_response ('view-scroll.html',
                                { 'lorem':lorem,
-                                 'menu_items': menu_items('scroll'),
+                                 'menu_items': menu_items('scroll',request),
                                  },
                                context_instance=RequestContext(request))
diff --git a/templates/view-logout.html b/templates/view-logout.html
new file mode 100644 (file)
index 0000000..0433628
--- /dev/null
@@ -0,0 +1,6 @@
+{% extends 'layout-myslice.html' %}
+
+{% block content_main %}
+{% include 'widget-logout.html' %}
+{% endblock %}
+
diff --git a/templates/widget-logout.html b/templates/widget-logout.html
new file mode 100644 (file)
index 0000000..97e7a0a
--- /dev/null
@@ -0,0 +1 @@
+<a href='/logout/confirm/'>Confirm logout</a>