[请益] CI框架的csrf错误页面

楼主: k80092 (游)   2016-11-23 09:39:36
菜鸟码农的我最近开发一个案子,为了防止重复送出有用到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里的东西呢?
作者: MOONRAKER (㊣牛鹤鳗毛人)   2016-11-23 13:38:00
为什么用到三个view会检查三次 一页有三个controller吗没听过There cannot be two tigers in one mountain吗
作者: xdraculax (首席怪叔叔)   2016-11-23 20:35:00
把自订错误作成 A 里的 function _show_error 里面就 view 那页,判断错误的时候 return $this->_show_error('csrf')MY_Security protected $_csrf_error = FALSE;csrf_show_error() { $this->_csrf_error = TRUE;加个 function 在 controler 去查 Security csrf_errorCI_Security 可以被 MY_Security 改写
作者: MOONRAKER (㊣牛鹤鳗毛人)   2016-11-24 13:07:00
阿只有一个controller为什么还会“希望错误讯息只显示在中间的view”描述模模糊糊还怪别人喔
作者: xdraculax (首席怪叔叔)   2016-11-24 19:26:00
不需要在 Security 就把想要的页面在里面产生,只要把结果记下,让 controller 能去读取后再跑 view 就可以了,其实我上面的留言已把重点都留了
楼主: k80092 (游)   2016-11-24 19:55:00
他跑完csrf_show_error()就停在错误讯息的页面,没有进任何一个controller中的说...@_@x大的意思是先把错误讯息保存起来后再进controller把他读出来没错吧?
作者: et69523820 (小猪)   2016-11-25 07:24:00
把错误讯息保存 在输出到样版变量即可 就可以显示你指定的错误讯息显示区域
作者: xdraculax (首席怪叔叔)   2016-11-25 11:22:00
如果你改过他还是被 csrf_show_error 带去默认错误页表示你的 MY_Security 可能没有改成功danny22.idv.tw/download/ci_csrf_test.zip
楼主: k80092 (游)   2016-11-28 12:07:00
搞定了,谢谢x大,原来我一直以为进了csrf_show_error()后就不会回到controller,结果自己写了个exit耍笨了,抱歉:(

Links booklink

Contact Us: admin [ a t ] ucptt.com