0

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

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

有没有简单的方法来实现这一目标?

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

我会很高兴有任何想法!

4

1 回答 1

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();
        }
    }
}

在响应正文中,您还可以设置要重定向用户的 url。使用 javascript 处理此重定向。

于 2013-09-11T21:12:10.553 回答