1

如何Session在自定义身份验证对象中使用组件(自定义或类似基础的)?(位于Controller/Components/Auth)??

我试过public $components = array('Session', 'name of my custom component');了,但它不起作用。

谢谢...

4

2 回答 2

1

由于我自己正在寻找一种方法来做到这一点,并且我发现有人问了这个问题,所以我将分享我的发现。

我看了一下 BaseAuthenticate::__construct() ,似乎 AuthComponent 将控制器的 ComponentCollection 发送到每个 Autehntication 对象。我试着做

$this->Session = $this->_Collection->__get('Session');
$this->Session->write('foo', 'bar');

它起作用了,但这只是因为我已经在我的 AppController 中加载了 SessionComponent。ComponentCollection::__get() 只返回加载的组件。您可能想查看 ComponentCollection 类及其父类 ObjectCollection,以了解有关如何使用组件的更多详细信息。

这就是我在 Authentication 类中所做的:

/**
 * Constructor
 *
 * @param ComponentCollection $collection The Component collection used on this request.
 * @param array $settings Array of settings to use.
 */
public function __construct(ComponentCollection $collection, $settings) {
    $settings = array_merge($this->settings, $settings);
    parent::__construct($collection, $settings);
    $this->http = new HttpSocket();
    $this->_initComponentCollection();
}

/**
 * Initializes all the loaded Components for the Authentication Object.
 * Attaches a reference of each component to the Authentication Object.
 *
 * @return void
 */
protected function _initComponentCollection() {
    $components = $this->_Collection->loaded();
    if (!empty($components)) {
        foreach ($components as $name) {
            $this->{$name} = $this->_Collection->__get($name);
        }
    }
}

这仅使用已加载的组件,因为我不想加载所有组件。我将使用 cakephp 打开一张票,看看是否可以将类似的片段添加到 BaseAuthenticate 类。

于 2013-05-17T00:50:53.840 回答
-1

根据蛋糕书:

// Pass settings in $components array
public $components = array(
    'Auth' => array(
        'authenticate' => array(
            'name of custom authentication object'
        )
    )
);

Auth 组件的 authenticate 属性是您声明将使用的身份验证对象的位置,无论是表单、基本、摘要还是自定义对象。

于 2013-04-26T19:03:40.127 回答