1. 程式人生 > >ckeditor上傳圖片時與後端的csrfToken驗證

ckeditor上傳圖片時與後端的csrfToken驗證

本篇部落格基於上一章為基礎,主要解決在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中成功執行,同時也相容其它瀏覽器。