如何在AJAX调用中正确使用cakephp的AuthComponent中的isAuthorized()

时间:2013-09-11 19:53:06

标签: php jquery ajax cakephp authorization

我正在使用cakephp-core中的AuthComponent。所以我使用isAuthorized() - Method来检查任何请求。 对于“正常”请求,这很好 - 当isAuthorized()返回false时,用户被重定向到“他来自哪里”,并且使用setFlash我可以显示一条消息,授权问题是什么(如果我想)。

但是当谈到AJAX请求时,这当然没有意义。然后响应是用户当前所在的页面作为响应文本...我更喜欢的是:如果ajax-call上的授权失败,则发送状态为400(或其他)的响应,并且只发送消息“未授权”因为你不是管理员“(或其他什么)。

有没有一种简单的方法可以实现这一目标?

我想到的唯一解决方法是为所有ajax请求创建一个控制器。在它的isAuthorized() - 方法中,它会(如果授权失败)重定向到具有1个参数(失败消息)的操作,并且该操作仅呈现此消息。但是(更不用说我不知道​​这是否会起作用,如果可能的重定向来自isAuthorized(),但我猜它会)对我来说似乎相当......肮脏/邋..那么有人知道一种更简单/更清洁的方式吗?

我对任何想法感到高兴!

1 个答案:

答案 0 :(得分:2)

您可以使用HTTP 401代码设置json响应并终止此过程:

public function isAuthorized($user) {
    if( ... ) {
        // Auth fails
        if($this->request->is('ajax')) {
            $this->response->type('json');
            $this->response->statusCode(401);
            $this->response->body(json_encode(array('status' => 'ERROR', 'message' => 'Unauthorized')));
            $this->response->send();
            $this->_stop();
        }
    }
}

在回复正文中,您还可以将网址设置为要重定向用户的位置。使用javascript处理此重定向。