[請益] CI框架的csrf錯誤頁面

看板PHP作者 (遊)時間8年前 (2016/11/23 09:39), 8年前編輯推噓1(1024)
留言25則, 4人參與, 最新討論串1/1
菜鳥碼農的我最近開發一個案子,為了防止重複送出有用到csrf 在codeigniter中,可以在application/views/errors/html/error_general.php 中自訂show_error()後的頁面,我想問的是,我如果override csrf_error()或是show_error()後,有辦法讓他跳到某個controller中 或是如同一般controller使用嗎? 因為我如果要override csrf_error()的話,繼承的不是CI_Controller ,就算用&get_interface()也無法調用controller的任何方法... 沒有辦法很好的說明真是不好意思:(,總之架構上來說就是在core裡有 A->繼承CI_Controller,存放了我在所有Controller要用到的所有方法 之後每一張Controller都是繼承了A,然後因為我的每個頁面的表頭表尾 都是一樣的,所以用了三個view組成一個畫面,現在我希望將錯誤訊息只 顯示在中間的view,但如果去改ci預設的那張php的話,雖然畫面上可以 達成,但因為我的頁面表頭有分成不同使用者有不同選單,沒靠controller 裡的方法無法判定,所以想問看看有沒有什麼方法可以辦到讓show_error() 或csrf_error()可以呼叫controller裡的東西呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.27.106.212 ※ 文章網址: https://www.ptt.cc/bbs/PHP/M.1479865179.A.464.html

11/23 13:38, , 1F
為什麼用到三個view會檢查三次 一頁有三個controller嗎
11/23 13:38, 1F

11/23 13:38, , 2F
沒聽過There cannot be two tigers in one mountain嗎
11/23 13:38, 2F
並不是一次有三個controller...是在一個controller中使用了多個$this->load->view() 檢查三次??我有提到檢查三次嘛@@??

11/23 20:35, , 3F
把自訂錯誤作成 A 裡的 function _show_error 裡面就 v
11/23 20:35, 3F

11/23 20:35, , 4F
iew 那頁,判斷錯誤的時候 return $this->_show_error(
11/23 20:35, 4F

11/23 20:35, , 5F
'csrf')
11/23 20:35, 5F

11/23 21:38, , 6F
MY_Security protected $_csrf_error = FALSE;
11/23 21:38, 6F

11/23 21:39, , 7F
csrf_show_error() { $this->_csrf_error = TRUE;
11/23 21:39, 7F

11/23 21:41, , 8F
加個 function 在 controler 去查 Security csrf_error
11/23 21:41, 8F
謝謝回答 不過我還是不太清楚,不過查了查,好像似乎沒辦法像我說那樣作,因為在載 入CI_Security之前,helper或是libraries都還沒被載入,所以只能夠用原始 的PHP代碼去建立東西:( 參考:http://stackoverflow.com/questions/14406922/prevent-from-displaying-the-default-csrf-error-page-in-codeigniter ※ 編輯: k80092 (61.27.106.212), 11/23/2016 22:19:57 ※ 編輯: k80092 (61.27.106.212), 11/23/2016 22:30:07 ※ 編輯: k80092 (61.27.106.212), 11/23/2016 22:30:50

11/24 09:38, , 9F
CI_Security 可以被 MY_Security 改寫
11/24 09:38, 9F
我有改寫了,只是因為沒辦法使用controller中的寫法,也沒辦法呼叫helper所以 沒辦法做出我要的東西,謝謝你的回答,我再研究看看:),有研究出來再來回文~

11/24 13:07, , 10F
阿只有一個controller為什麼還會「希望錯誤訊息只顯示
11/24 13:07, 10F

11/24 13:08, , 11F
在中間的view」描述模模糊糊還怪別人喔
11/24 13:08, 11F
我有提到說我一個畫面是用多個view組成,我想您應該會知道一個controller可 以載入多個view吧?我也沒有怪別人,我一開始就有說我也說不太清楚。總之謝 謝您的回答,耍嘴皮子既沒辦法改善問題,也不會讓世界更好。我就此打住。 ※ 編輯: k80092 (61.27.106.212), 11/24/2016 19:02:14

11/24 19:26, , 12F
不需要在 Security 就把想要的頁面在裡面產生,只要把
11/24 19:26, 12F

11/24 19:26, , 13F
結果記下,讓 controller 能去讀取後再跑 view 就可以
11/24 19:26, 13F

11/24 19:26, , 14F
了,其實我上面的留言已把重點都留了
11/24 19:26, 14F

11/24 19:55, , 15F
他跑完csrf_show_error()就停在錯誤訊息的頁面,沒有進任
11/24 19:55, 15F

11/24 19:56, , 16F
何一個controller中的說...@_@
11/24 19:56, 16F

11/24 19:57, , 17F
x大的意思是先把錯誤訊息保存起來後再進controller把他讀
11/24 19:57, 17F

11/24 19:57, , 18F
出來沒錯吧?
11/24 19:57, 18F

11/25 07:24, , 19F
把錯誤訊息保存 在輸出到樣版變數即可 就可以顯示你
11/25 07:24, 19F

11/25 07:25, , 20F
指定的錯誤訊息顯示區域
11/25 07:25, 20F

11/25 11:22, , 21F
如果你改過他還是被 csrf_show_error 帶去預設錯誤頁
11/25 11:22, 21F

11/25 11:26, , 22F
表示你的 MY_Security 可能沒有改成功
11/25 11:26, 22F

11/25 11:51, , 23F
danny22.idv.tw/download/ci_csrf_test.zip
11/25 11:51, 23F

11/28 12:07, , 24F
搞定了,謝謝x大,原來我一直以為進了csrf_show_error()後
11/28 12:07, 24F

11/28 12:10, , 25F
就不會回到controller,結果自己寫了個exit耍笨了,抱歉:(
11/28 12:10, 25F
文章代碼(AID): #1ODFDRHa (PHP)
文章代碼(AID): #1ODFDRHa (PHP)