CakePHP:覆盖BasicAuthenticate.php

时间:2014-11-17 17:30:20

标签: cakephp override basic-authentication core

我试图覆盖 lib / Cake / Controller / Component / Auth / BasicAuthenticate.php , 因为我需要更改unauthenticated()方法。

所以我将文件复制并修改为 app / Lib / Cake / Controller / Component / Auth / BasicAuthenticate.php (也尝试没有' Cake '文件夹),但不考虑更改。

直接修改核心文件时,我的编辑工作正常,但我不是。

我该怎么办? 我使用的是Cake 2.5

1 个答案:

答案 0 :(得分:1)

检查是否确实需要覆盖核心类

对我而言,这看起来像是在错误的轨道上,除非你没有关于基本身份验证适配器在何处以及如何使用的控件(例如在插件中),否则不应该超越该类。不提供配置。

如果你真的需要覆盖这个类,那么路径应该是

应用/ LIB /控制器/组件/认证/ BasicAuthenticate.php

它应该可以正常工作(对我来说,使用CakePHP 2.5.6)。

<强> http://book.cakephp.org/2.0/en/core-utility-libraries/app.html#overriding-classes-in-cakephp


使用自定义身份验证处理程序

如果您可以控制适配器配置,我建议您扩展 BasicAuthenticate类,而只覆盖unauthenticate()方法,并且最后让auth组件使用自定义适配器。

这样的东西

应用/控制器/组件/认证/ CustomBasicAuthenticate.php

App::uses('BasicAuthenticate', 'Controller/Component/Auth');

class CustomBasicAuthenticate extends BasicAuthenticate {
    public function unauthenticated(CakeRequest $request, CakeResponse $response) {
        // do something special
    }
}

<强>控制器

public $components = array(
    'Auth' => array(
        'authenticate' => array(
            'CustomBasic'
        )
    )
);

另请参阅食谱中的Creating Custom Authentication objects部分。