2015/03/17

HTTP Authentication 的登出按鈕



這年頭居然還有人使用 HTTP Authentication (Basic and Digest Access Authentication)

不管了,既然是客戶需求那就只好使用了。


不過麻煩的來了

使用 HTTP Authentication 做登入很方便

只要 web server 吐一個 WWW-Authenticate: Basic realm="xxxx" 的 header 就好了

但是要登出就麻煩了

原本想說做一個 logout.php 之類的固定回傳 401 Unauthorized 就好

但是會有當次 dialog 出來時無法再度 login 的 bug

那該怎麼辦才好呢???

這時候IE就很好用啦
只要

document.execCommand("ClearAuthenticationCache");


麻煩的在 mozilla 跟 webkit 上面

原先使用 ajax 的 beforeSend 去輸入錯誤的帳密

結果 webkit 可用 mozilla 不能使用

因為 mozilla 不給改 header 阿~~

研究了一小時終於試出一個比較好的辦法


$.ajax({
 type:  'GET',
 async: false,
 url:  '/#',
 username: 'logout',
 password: 'logout'
});


組合以上方法


$('#logout').click(function(){
 if(document.execCommand("ClearAuthenticationCache")){
 }
 else{
  $.ajax({
   type:  'GET',
   async: false,
   url:  '/#',
   username: 'logout',
   password: 'logout'
  });
 }
});


這樣IE5~11、webkit 與 mozilla 三種瀏覽器行為就會完全一致了

沒有留言:

張貼留言