jquery
  • authentication
  • 2011-08-30 81 views 2 likes 
    2

    我正在服務器端使用非流行的編程語言創建Web應用程序。因此,大部分認證代碼需要由我自己開發。使用jQuery將附加數據附加到頁面中的每個鏈接

    在服務器端我需要接收與來自客戶端,以便我可以決定,如果這是一個有效的用戶每GET請求的認證字符串(否則我將用戶引導到一個登錄屏幕)。

    我想我可以使用jQuery來添加一些各個環節,東西線的href參數:「?」

    jQuery("a").attr("href).append("?token='"+tokenStr+"'"); 
    

    不過,如果該鏈接已經有一個,它會引入一個錯誤。我更喜歡把信息作爲POST發送到服務器(任何其他的選擇?)但我不知道是否有可能在HTML中做到這一點。

    我不希望身份驗證令牌成爲URL的一部分的原因是因爲如果用戶將該頁面標記爲該頁面,則服務器會將他引導至登錄頁面,因爲該令牌將在一段時間後過期。

    +1

    也許你可以使用cookie來代替,這似乎是我唯一的出路,不破書籤。 – kapa

    +1

    我也這麼認爲。但我需要說服我的老闆,我試圖尋找替代方案,因爲我們的客戶來自特殊部門,他們可能會在瀏覽器上禁用Cookie,或者完全沒有。 – AlexStack

    回答

    0

    試試這個:

    var tokenStr = 'something'; 
    $('a').each(function(){ 
        var elem = $(this), 
         href = elem.attr('href'), 
         hasQueryString = href.indexOf('?') > -1; 
        if (hasQueryString) { 
         elem.attr('href', href + '&token=' + tokenStr); 
        } else { 
         elem.attr('href', href + '?token=' + tokenStr); 
        } 
    }); 
    

    這裏有一個更好的版本,允許散列(#)在URL中/錨:

    var tokenStr = 'something'; 
    $('a').each(function() { 
        var elem = $(this), 
         parts = elem.attr('href').split('#'), 
         hasQueryString = parts[0].indexOf('?') > -1; 
        if (parts[0].length > 0) { 
         parts[0] = parts[0] + (hasQueryString ? '&' : '?') + 'token=' + tokenStr; 
        } 
        elem.attr('href', (parts.length > 1 ? parts.join('#') : parts.join())); 
    }); 
    

    此外,您還可以注入 「令牌」 參數作爲隱藏字段以太網頁上的所有表單:

    $('form').append(
        $('<input type="hidden" name="token"/>').attr('value', tokenStr) 
    ); 
    
    +0

    你的解決方案實際上並不好。在下面檢查我的答案。 – WTK

    0

    您可以在頁面中使用兩個(POST或GET),並檢查安全等方面的影響的信息:http://www.cs.tut.fi/~jkorpela/forms/methods.html

    不過,我不太明白你爲什麼不只是分析的該鏈接你的行爲和你可能會發現與相應的迴應,如添加一個+而不是一個

    編輯:mblase是正確的。

    +0

    我不希望身份驗證令牌成爲URL的一部分的原因是因爲如果用戶將該頁面標記爲該頁面,則服務器會將他引導至登錄頁面,因爲該令牌將在一段時間後過期。 – AlexStack

    +0

    除了我的問題是關於GET方法的鏈接(元素)不是表單。 – AlexStack

    +0

    嗯,我明白了。好吧,看起來你必須告訴你的老闆你必須使用cookies:/ – Kheldar

    0

    您可以將隱藏的輸入附加到頁面上的每個表單,以支持rt通過POST或GET發送令牌。

    $("form").append('<input type="hidden" name="token" value="'+tokenStr+'"/>'); 
    

    並以代幣添加到網頁上使用的任何鏈接: 編輯:其實有一個問題附加令牌的任何其他實現和是這樣的話,當你有它的一些散,例如鏈接/mypage.html?foo=bar#content。 我們必須檢測每當鏈接href有散列字符正確追加令牌。

    更新下面的代碼:

    $("a").each(function() { 
        var gps = this.href.split('#');   
        gps[0] = gps[0].indexOf('?')>-1 ? '&'+tokenStr : '?'+tokenStr; 
        this.href = gps.length > 1 ? gps.join('#') : gps.join(); 
    }); 
    
    +0

    很好的提及form.append,也很好處理URL中的任何可能的哈希值。 –

    +0

    然而,你的並不包含只有哈希鏈接的錯誤 –

    +0

    爲什麼你要添加一個令牌到只哈希鏈接? :) – WTK

    相關問題