HAP框架之Token驗證

閒來無事,總結這幾天遇到的一個問題,以及解決過程。

這幾天在做一個考覈項目,拿到需求以後,那就敲代碼啊。敲完一個修改功能的時候,測試的時候,突然跳出來這樣一個提示框。

請求參數中Token不存在, what,什麼鬼。

沒辦法,有問題那就去解決唄。

首先我就查看我自己的代碼有沒有寫錯,於是各種debugger;各種設斷點調試。

好吧,數據正常傳到後臺去了。說明我的代碼是沒問題的。

那怎麼辦,遇到問題那就百度一下唄。

搜了一下,百度上沒有我想的問題結果。

我就不信了,百度找不到。那我就試試科學上網唄。

不好意思,還是沒有。

懵bi中

。。。

好吧,鬱悶完了,問題還是得解決。

於是,我就想,這是不是框架中自定義的東西呢。

好吧,查一下官方文檔。

尼瑪,還真是。尷尬。。。

官方文檔是這樣說的。

原來這個東西是3.5版本以後,爲了防止數據篡改,在進行update數據時,會去校驗token。

並且提供了一個解決辦法,那就是在配置文件中配置sys.security.token.validate=false 即可。

但是這就等於把token驗證給關掉了。但官方文檔下面又說了不建議關閉該功能。。。畢竟數據安全性還是很重要的。

於是心裏十萬個草泥馬在奔騰。

又說不建議關閉該功能,但只給關閉該功能的解決辦法。又沒有說遇到此類問題怎麼解決。。。

難道就此放棄,那是不存在的。

於是,我就去找這個token到底是何方神聖。我打開瀏覽器的調試模式,發現從數據可每次查詢一條數據,這條數據都會帶上這個token,在瀏覽器調試模式下參數爲_token。

那麼我就想,既然提示框說的是請求參數中Token不存在,那我就將這個參數獲得以後回傳到後臺去後臺驗證試試。

於是,問題又來了,怎樣去獲取這個值呢。

既然每條數據都會帶有_token,那就從選中行的數據入手唄。

function getToken() {
        var choosegrid = $("#grid").data("kendoGrid");
        var selection = choosegrid.selectedDataItems();
        for (var i = 0; i < selection.length; i++) {
            return selection[i]._token;
        }
    }

於是就寫了一個方法去獲取它,運氣真好,還真被我拿到了。既然拿到了,就傳到後臺參與驗證唄。

var data = viewModel.model.toJSON();
data._token = token;

先把token加到model裏面去,再通過ajax把整個data傳到後臺。

tenant.set_token(dto.get(i).get_token());

到這裏就應該結束,那就再運行試試唄。

好吧,就是這樣做,問題解決。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章