如何使用CakePHP 2.2对用户进行身份验证?

时间:2012-09-21 14:49:10

标签: php authentication cakephp-2.2

我已阅读Authentication核心库的文档 ,如何使用它并不是很清楚。它似乎假设了很多先验知识。

具体做法是:

  

使用$ 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)错误:发生内部错误。

     

Stack Trace CORE \ Cake \ Error \ ErrorHandler.php第162行→   ErrorHandler :: handleFatalError(整数,字符串,字符串,整数)   [内部函数]→ErrorHandler :: handleError(整数,字符串,   字符串,整数,数组)CORE \ Cake \ Core \ App.php第926行→   call_user_func(字符串,整数,字符串,字符串,整数,数组)   CORE \ Cake \ Core \ App.php第899行→App :: _ checkFatalError()[内部   功能]→App :: shutdown()

任何人都可以提供一个如何保护Controller的简单示例,以便只有经过身份验证的用户才能访问它吗?我还可以保护个别的动作功能吗?

2 个答案:

答案 0 :(得分: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 )
            )
        )
    )
);

答案 1 :(得分:-1)

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

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

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