[[PageOutline(2-5,Contents,pullout)]]
= True logout mechanism for Basic/Digest Authentication
== Description
This patch allows you to logout from Basic/Digest Auth without closing the browser.
* Apache [http://httpd.apache.org/docs/1.3/howto/auth.html#basicfaq claims that it is not possible].
* Nano Documet [http://www.nanodocumet.com/?p=6 gives a solution] that simply works.
The concept is explained on [http://www.berenddeboer.net/rest/authentication.html Berend de Boer page].
This patch works for `tracd` standalone. There's no need of Apache or any other server.
This patch should work on all platform, although I've only tested version 0.9.6 on Windows XP.
Notes:
* Tested successfully with Firefox and Internet Explorer 6.
* It works fine with Camino.
* It may not work with Safari and Konqueror.
== Usage
* file `Share\trac\htdocs\js\trac.js`, append at the end of file:
{{{
function clearAuthenticationCache(page) {
// Default to a non-existing page (give error 500).
// An empty page is better, here.
if (!page) page = '.force_logout';
try{
var agt=navigator.userAgent.toLowerCase();
if (agt.indexOf("msie") != -1) {
// IE clear HTTP Authentication
document.execCommand("ClearAuthenticationCache");
}
else {
// Let's create an xmlhttp object
var xmlhttp = createXMLObject();
// Let's prepare invalid credentials
xmlhttp.open("GET", page, true, "logout", "logout");
// Let's send the request to the server
xmlhttp.send("");
// Let's abort the request
xmlhttp.abort();
}
} catch(e) {
// There was an error
return;
}
}
function createXMLObject() {
try {
if (window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
}
// code for IE
else if (window.ActiveXObject) {
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
} catch (e) {
xmlhttp=false
}
return xmlhttp;
}
}}}
* file `Lib\site-packages\trac\web\auth.py`, locate method `get_navigation_items`, and change:
{{{
yield ('metanav', 'logout',
Markup('Logout'
% escape(self.env.href.logout())))
}}}
to:
{{{
yield ('metanav', 'logout',
Markup('Logout'
% ((escape(self.env.href.logout()),) *2) ))
}}}
* Now that's ok to start `tracd` and test logout feature.
(Patches for other versions below)
== Recent Changes
[[ChangeLog(truehttplogoutpatch, 3)]]
== Author/Contributors
'''Author:''' [wiki:flox] [[BR]]
'''Maintainer:''' [[Maintainer]] [[BR]]
'''Contributors:'''