0

我已经阅读了Authentication core library 的文档,但并不清楚如何使用它。它似乎假设了很多先验知识。

具体来说:

您可以使用 $this->Auth->authenticate 配置身份验证处理程序。您可以为身份验证配置一个或多个处理程序。使用多个处理程序允许您支持登录用户的不同方式。当登录用户时,身份验证处理程序按照声明的顺序进行检查。一旦一个处理程序能够识别用户,就不会检查其他处理程序。相反,您可以通过抛出异常来停止所有身份验证。您将需要捕获任何抛出的异常,并根据需要处理它们。

您可以在控制器的 beforeFilter 或 $components 数组中配置身份验证处理程序。您可以使用数组将配置信息传递到每个身份验证对象:

所以在我PeopleController的示例代码中我写了:

<?php
class PeopleController extends AppController {
    public $helpers = array('Html', 'Form');

    $this->Auth->authenticate = array(
        AuthComponent::ALL => array('userModel' => 'Member'),
        'Form',
        'Basic'
    );

    public function index() {

    }
}

这个异常会触发:

语法错误,意外的 '$this' (T_VARIABLE),期望函数 (T_FUNCTION) 错误:发生内部错误。

堆栈跟踪 CORE\Cake\Error\ErrorHandler.php 第 162 行 → ErrorHandler::handleFatalError(integer, string, string, integer) [内部函数] → ErrorHandler::handleError(integer, string, string, integer, array) CORE\Cake \Core\App.php 第 926 行 → call_user_func(string, integer, string, string, integer, array) CORE\Cake\Core\App.php 第 899 行 → App::_checkFatalError() [内部函数] → App::shutdown ()

谁能提供一个简单的例子来说明如何保护控制器,以便只有经过身份验证的用户才能访问它?我还可以保护单个 Action 函数吗?

4

2 回答 2

0

在类定义中不能有实例引用。

$this只能在类方法中访问。

在您的控制器中(比如说,AppController.php):

    public $components = array(
    'Auth' => array(
        'loginAction' => 'login',
        'loginRedirect' => 'home',
        'authenticate' => array(
            'Form' => array(
                'userModel' => 'User',
                'fields' => array( 'password' => 'password' ),
                'scope' => array( 'User.active' => true )
            )
        )
    )
);
于 2012-09-21T14:58:08.407 回答
-1

如果我没记错的话,你应该在beforeFilter()

public function beforeFilter(){
    parent::beforeFilter();
    $this->Auth->authenticate = array(
        AuthComponent::ALL => array('userModel' => 'Member'),
        'Form',
        'Basic'
    );
}

而且,正如 Martin 已经提到的,$this只能在(对象)方法中使用,因为它$this指的是调用该方法的当前对象。

于 2012-09-21T14:55:07.050 回答