作者:老王
Auth组件是CakePHP1.2新加入的功能,用于登录验证等方面很方便,不过因为还没有相应的
文档,所以只能自己啃
源代码来猜测使用方法。
大致工作方式是这样的:
Auth缺省认为你的用户模型为User,相应的表就是users,相应的用户名,密码
字段是username和password
复制内容到剪贴板
代码:
var $userModel = 'User';
var $fields = array('username' => 'username', 'password' => 'password');所有这些缺省值都是可以修改的,不过在哪里改是值得商榷的,肯定不能直接修改源
文件,那样等你升级的时候麻烦就大了,通过查看dispatcher.php文件,我们发现在beforeFilter方法执行后才进行
组件的初始化,所以在beforeFilter里修改组件的缺省值是比较合适的。
相应的代码大致类似这样:
复制内容到剪贴板
代码:
class AppController extends Controller
{
function beforeFilter()
{
$this->Auth->userModel = 'User';
$this->Auth->loginAction = '/users/login';
$this->Auth->fields = array('username' => 'username', 'password' => 'password');
......在我们的登录方法中,我们不用做任何操作,因为Auth会根据设置自动进行合法性验证。如果Auth发现你尚未登录,会根据你的设置推测出登录地址,并重定向到此地址,比如上面设置,
CakePHP会推测登录地址为/users/login(这也是缺省地址)。
不过这中间还是有一个地方会很烦人,那就是Auth组件缺省对密码的加密方式不是可配置的,大致如下:
复制内容到剪贴板
代码:
function password($password) {
return Security::hash(CAKE_SESSION_STRING . $password);
}这样的硬编码当然没有通用性,毕竟多数情况我们使用的是md5方式,解决这个问题的方式大致如下:
拷贝/cake/libs/controller/components/auth.php文件到/app/controller/components/auth.php目录下,然后修改
复制内容到剪贴板
代码:
function password($password) {
return md5($password);
}即可,因为CakePHP加载组件的时候会优先从app目录加载,所以这个方法是可行的,但是多少还是有点不舒服,更好的方法是我们自
定义一个组件,这个组件继承Auth组件,并在其中覆盖父类的password()方法,这样就顺眼多了。
还有一点,因为我们的
控制器里,可能并不是每个action都需要auth验证,所有有时候我们需要将一些action排除在外,方法是在相应的控制器里加入类似下面的代码:
复制内容到剪贴板
代码:
function beforeFilter()
{
//actions we allow without authentication, you can also put them in the app_controller.php
$this->Auth->allow('index', 'register', 'login', 'logout');
}可以参考
此链接。