CakePHP 1.3中的JSONP请求和身份验证组件

CakePHP 1.3中的JSONP请求和身份验证组件,cakephp,request,cakephp-1.3,jsonp,authentication,Cakephp,Request,Cakephp 1.3,Jsonp,Authentication,我正在开发一个jQuery移动应用程序,它需要通过一个使用CakePHP 1.3构建的网站表单对用户进行身份验证 身份验证过程通过标准的CakePHP身份验证组件进行处理 如果我使用JSON,CakePHP会检测到XMLHttpRequest已通过请求头发送。 如果用户未登录,CakePHP将返回“错误403:禁止”。这是完美的 但是我必须使用JSONP(用于跨域帖子)来提交凭据,这意味着不会发送XMLHttpRequest头。 如果用户未登录,CakePHP将返回login.ctp视图的HTM

我正在开发一个jQuery移动应用程序,它需要通过一个使用CakePHP 1.3构建的网站表单对用户进行身份验证 身份验证过程通过标准的CakePHP身份验证组件进行处理

如果我使用JSON,CakePHP会检测到XMLHttpRequest已通过请求头发送。 如果用户未登录,CakePHP将返回“错误403:禁止”。这是完美的

但是我必须使用JSONP(用于跨域帖子)来提交凭据,这意味着不会发送XMLHttpRequest头。 如果用户未登录,CakePHP将返回login.ctp视图的HTML代码,这在ajax上下文中不是很有用

相反,我喜欢接收一种JSON对象,比如

jQuery16405332830320302397_1328263230862({
    "success" : false, 
    "errorcode" : 401, 
    "errormessage" : "User not authenticated"
})

有没有一种“蛋糕”方法可以让CakePHP Auth组件处理JSONP请求?

我遇到了类似的问题。在我的例子中,API的格式是:
http://example.com/action.json
。 我绕过auth进行快速训练,但您可以编写逻辑来生成响应

public function beforeFilter() {
        $methods = array('action1','action2');
         if (in_array($this->action, $methods) &&
        isset($this->params['ext']) && $this->params['ext'] == 'json'
    ) {
        /* **************************************************
         * //Your logic here
         * //For example,in my case I allowed all json request:
         * $this->Auth->allow($this->action, 'login','add');
         ***************************************************/
    }

    }

这可能是一个更好的解决方案,但对我来说很有效。

我也遇到了类似的问题。在我的例子中,API的格式是:
http://example.com/action.json
。 我绕过auth进行快速训练,但您可以编写逻辑来生成响应

public function beforeFilter() {
        $methods = array('action1','action2');
         if (in_array($this->action, $methods) &&
        isset($this->params['ext']) && $this->params['ext'] == 'json'
    ) {
        /* **************************************************
         * //Your logic here
         * //For example,in my case I allowed all json request:
         * $this->Auth->allow($this->action, 'login','add');
         ***************************************************/
    }

    }
这可能是一个更好的解决方案,但这对我来说很有效