我已阅读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的简单示例,以便只有经过身份验证的用户才能访问它吗?我还可以保护个别的动作功能吗?
答案 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
指的是从中调用该方法的当前对象。