ckeditor上傳圖片時與後端的csrfToken驗證
阿新 • • 發佈:2019-02-05
本篇部落格基於上一章為基礎,主要解決在ckeditor上傳圖片功能與csrf 衝突問題。
ckeditor上傳圖片時會提交自己的csrf token,名字叫“ckCsrfToken“。
如果後端配置有csrf校驗,這會產生衝突,解決辦法有兩種,一種是是對指定的表單提交新增csrfToken的HTML的程式碼,第二種是修改csrf的cookie名稱方法。
1、設定ckeditor的預設值,如果是通過介面拿資料,這需要等ckeditor例項構建完成後設定
editor.on("instanceReady", function(ev) {
self.$http.get(url)
.then(function (response) {
if (response.body.success) {
ev.editor.setData(response.body.content);
}
});
});
2、採用第一種方式,通過在上傳圖片表單中插入html程式碼
<input type="hidden" name="csrfmiddlewaretoken" value=getCookie("csrftoken")>
chrome和IE都有效,但是該方法在firefox中無效。
2、採用第二種方式,修改ckcsrfToken的取值和名稱與後端需要的token名稱和取值一致,通過修改ckeditor.js的原始碼
getCsrfToken:function(){
var a=CKEDITOR.tools.getCookie("ckCsrfToken"); if(!a||40!=a.length){
var a=[],b="";
if(window.crypto&&window.crypto.getRandomValues)
a=new Uint8Array(40),
改為
getCsrfToken:function(){
var a=CKEDITOR.tools.getCookie("csrftoken"); if(!a||32!=a.length){
var a=[],b="";
if (window.crypto&&window.crypto.getRandomValues)
a=new Uint8Array(32),
“csrftoken”為cookie中需要認證的csrftoken名稱,32為csrftoken的長度,根據實際情況進行修改;
a=new CKEDITOR.dom.element("input"), a.setAttributes({name:"ckCsrfToken",type:"hidden"}),
改為
a=new CKEDITOR.dom.element("input"), a.setAttributes({name:"csrfmiddlewaretoken",type:"hidden"}),
該方法在firefox中成功執行,同時也相容其它瀏覽器。