vue-resource get/post請求如何攜帶cookie的問題
當我們使用vue請求的時候,我們會發現請求頭中沒有攜帶cookie傳給後臺,我們可以在請求時新增如下程式碼:
vue.http.options.xhr = { withCredentials: true}; 的作用就是允許跨域請求攜帶cookie做身份認證的;
vue.http.options.emulateJSON = true; 的作用是如果web伺服器無法處理 application/json的請求,我們可以啟用 emulateJSON 選項;
啟用該選項後請求會以 application/x-www-form-urlencoded 作為MIME type, 和普通的html表單一樣。 加上如下程式碼,get請求返回的程式碼會
攜帶cookie,但是post不會;
為了方便,我們這邊是封裝了一個get請求,只要在get請求新增引數 { credentials: true } 即可使用;
const ajaxGet = (url, fn) => { let results = null; Vue.http.get(url, { credentials: true }).then((response) => { if (response.ok) { results = response.body; fn(1, results); } else { fn(0, results); } }, (error) => { if (error) { fn(0, results); } }); };
如上只會對get請求攜帶cookie,但是post請求還是沒有效果的,因此在post請求中,我們需要新增如下程式碼:
Vue.http.interceptors.push((request, next) => { request.credentials = true; next(); });
Vue.http.interceptors 是攔截器,作用是可以在請求前和傳送請求後做一些處理,加上上面的程式碼post請求就可以解決攜帶cookie的問題了;
因此我們的post請求也封裝了一下,在程式碼中會新增如上解決post請求攜帶cookie的問題了;如下程式碼:
const ajaxPost = (url, params, options, fn) => { let results = null; if (typeof options === 'function' && arguments.length <= 3) { fn = options; options = {}; } Vue.http.interceptors.push((request, next) => { request.credentials = true; next(); }); Vue.http.post(url, params, options).then((response) => { if (response.ok) { results = response.body; fn(1, results); } else { fn(0, results); } }, (error) => { if (error) { fn(0, results); } }) };