CakePHP 3 Json 响应而不是重定向(如果 ext = json )
CakePHP 3 Json response instead of redirect ( if ext = json )
有没有简单的方法来配置 CakePHP 身份验证组件以发送 json 响应而不是正常重定向到登录 url。
我使用了许多 ajax 请求,当会话过期时,ajax 请求将获得我主页的 html 而不是 json 编码状态的响应。
我希望 CakePHP 发送以下 json 响应,如果用户未登录,并且查询是使用 json 扩展进行的。
{status: false, message: "Please log in"}
非 ajax 页面加载仍然需要像往常一样重定向。
您应该查看系统在哪里检查您是否已登录,并查看未登录的情况。将以下if
环绕在它周围:
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
//put here the html for the log in screen
} else {
$response = '{status: false, message: "Please log in"}';
echo json_encode($response);
}
由于很难确定是否发出 ajax 请求,Cake 3 使用 X-Request-With = XMLHttpRequest。这似乎是jquery的默认值(但谁再使用它呢?
您需要手动设置该标头,以允许 cakephp 检测到您的请求确实是 ajax。
您的 ajax 请求可能适用于其他页面,因为您可能正在设置 _serialize var 并设置接受标头或使用 .json 扩展名强制使用 json。但是,auth 函数不检查接受标头,它只检查 X-Request-With 标头。
因此,请在 xhr 请求中验证 X-Request-With 是否为 XMLHttpRequest,您应该会收到 403。
如果要进一步自定义返回的元素或数据,请查看AuthComponent ajaxLogin参数。
处理 Ajax 未授权
基本上,您需要将值设置为要渲染的元素。Cake 将查看您的元素模板路径并加载该元素。
// In your AppController
$this->loadComponent('Auth', [
'ajaxLogin' => 'yourAjaxElement', // This is what is important
// Optional stuff....
'authenticate' => [
'Form' => [
'finder' => 'AuthUser'
]
],
'authorize' => ['Controller'],
// More settings...
然后创建此元素
Template/Element/yourAjaxElement.ctp
快乐编码。
相关文章:
- 如果 a 为 false,则 if(a) === if(false)
- RegEx删除空属性?例如,如果(class=“”||class=“”)移除;否则就下课
- 如何在angularJS中编辑时,如果DB中的值为true,则设置复选框,如果值为false,则取消选中复选框
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- 如果文本字段为空,则使用JavaScript应用CSS样式
- Extending Ext.data.NodeInterface
- 如果我在javascript中输入无效的电子邮件或空白,如何显示特定的文本框边框红色
- 如果href包含X,请更改href
- 如果localstorage为空,则显示欢迎消息
- 点击后隐藏潜水?(但如果Div是一面旗帜呢?)
- 如果元素's的ID以数字开头
- Jquery表单验证插件-如果选中复选框,如何在提交时执行某些操作
- Jquery模板,如果xx&&如果yy
- 如果值为空,如何设置输入的默认值?jQuery
- Extjs如果Ext.panel.panel的collapsed=true,则展开的宽度不合适
- CakePHP 3 Json 响应而不是重定向(如果 ext = json )
- 如果我通过 getEditor 从 Ext.form.field.Date 收到值,如何以正确的格式保存值
- 是否可以用Ext.js实现可移动工具栏,如果可以,如何用我的代码实现
- 是否可以调用两个函数,如果ext.form.checkbox被选中?或者为什么我在openlayers中的层不能重新排序
- 如果在Ext.application()执行之前需要全局帮助函数,我应该将它们放在哪里?