我正在为我的所有ajax调用使用预定义的响应格式。
如果请求是success
,则服务器将响应:
{"status":true,"data":{"name":"person","age":2}}
请注意data
没有必要。
如果请求失败,那么我将获得
{"status":false,"reason":"You are not authorised."}
因此,每个回复都有一个status
字段,如果状态为FALSE
,则会有reason
字段。
问题是现在我在Codeigniter中启用CSRF
保护,如果令牌过期/失败,系统输出
The action you have requested is not allowed.
这是HTML内容。
是否可以扩展安全类,以便如果请求是通过Ajax,那么它将保持json_encoded格式,否则使用html格式。(我不想修改核心)
感谢。
答案 0 :(得分:2)
此错误消息是从CI_Exceptions::show_error
方法(位于system / core中)呈现的。您可以通过常规方式extend this class并覆盖此方法以捕获此错误并返回您想要的任何内容。
你可以通过覆盖它来摆脱CI_Security::csrf_show_error
方法中的调用,这样它就不会简单地调用
show_error('The action you have requested is not allowed.');
这可能更强大。
或者你可以攻击CI_Exceptions
课程内的这个。由于此错误没有特定的错误代码,因此您必须匹配可能在更新之间中断的消息(currently hardcoded)。结果类可能如下所示:
class MY_Exceptions extends CI_Exceptions {
public function show_error($heading, $message, $template = 'error_general', $status_code = 500) {
if ($message == 'The action you have requested is not allowed.') {
// handle this error your way
} else {
// send every other error to the original handler
parent::show_error($heading, $message, $template, $status_code);
}
}
}