CakePHP - 如果未设置应用程序cookie,则拒绝请求

时间:2015-07-30 14:50:15

标签: cakephp

在这里完成PHP新手。我有一个第三方PHP应用程序(由其他人开发,但我有代码),当用户登录其登录页面时设置cookie。让我们称之为MYAPPCOOKIE。我还有一个基于CakePHP的API,使开发人员能够通过易于使用的API提取信息。

如果未设置MYAPPCOOKIE,我想要禁止访问API。换句话说,在返回API值之前依赖登录门户的用户。我知道这是一种弱认证机制,但我真的很想从这里开始。

我理解我的应用和蛋糕API是两个不同的实体。所以要开始,我首先编辑了api / app / Config / core.php并添加了以下行:

Configure::write('Session', array(
                'defaults' => 'php',
                'cookie' => 'MYAPPCOOKIE'
        ));

我认为这会让我的Cake层访问主应用程序使用的相同cookie。

现在,如果此cookie不存在,我该如何拒绝API访问?我是否必须转到每个API的每个控制器并执行类似

的操作
$this->Cookie->read('MYAPPCOOKIE');

然后完成剩下的工作?或者,如果正在访问API的实例也具有该cookie集,那么我是否有更通用的方法来检查Cake Layer,如果没有,只返回所有 API的4xx?

1 个答案:

答案 0 :(得分:0)

所以我终于通过以下方式解决了这个问题:

a)事实证明使用cookies是一个坏主意。实际上没有办法删除cookie - 你只能使它过期 - 浏览器决定何时删除它。因此,即使您在应用程序中更改cookie以使其在注销时过期,cookie仍然存在,并且下次在cakePHP应用程序中检查isset($ _ COOKIE [cookiename])时,它仍然存在,这意味着您可以& #39;确实使用此方法确保在访问API(CakePHP)之前登录到应用程序(PHP)

b)在我的情况下,解决方案是使用$ _SESSION - PHP应用程序在人员登录时设置用户名和其他详细信息,并在您注销时清除会话,以确保API与在App的登录系统中,我将以下代码添加到AppController.php:

public function beforeFilter() {
        if (!$this->Session->Read('username')) 
        {

            throw new NotFoundException(__('Not Authenticated'));
            return;
        }

    }