CakePHP 身份验证组件解密 - 第 2 部分
身份验证组件变量详细解释….
跳转到 CakePHP 身份验证组件解密 - 第 1 部分
在我们之前的文章中,我们学习了如何实现一个非常基础但有效的身份验证系统,以保护 Web 应用程序中的安全区域。重要的是,你可以构建更复杂和更完善的身份验证系统,我们将在本系列的下一篇文章中进行探讨。为此,我们需要了解身份验证组件的基本部分。在本篇文章中,我们只介绍变量,在下一篇文章中我们将讨论重要函数。
最常用的变量。
- string $authError = null 它是一个字符串类型变量,主要用于在用户尝试访问其无权访问的区域时提供错误消息。你可以在 beforeFilter() 中设置它,也可以作为身份验证组件的参数。例如
function beforeFilter()
{
$this->Auth->authError="You don't have access to that area. Please login first.";
}
- boolean $autoRedirect = true 它决定是否自动重定向并退出身份验证组件,如果登录成功。该变量的重要性在于,如果你在 login() 操作中拥有自定义代码(cookie、上次登录),而你希望执行这些代码,那么你需要将其设置为 false,这样身份验证组件就不会自动重定向。如果它设置为 true,那么你 login() 中的任何代码都不会被执行。例如
function beforeFilter()
{
$this->Auth->autoRedirect=false;
}
function login()
{
if($this->Auth->user()!=null)
{
$this->User->id=$this->Auth->user('id');
$current = date("F j, Y, g:i a");
$this->User->saveField('last_login',$current);
$this->redirect(array('controller'=>'users','action'=>'profile'));
}
}
- array $data = array() 该变量包含控制器的表单数据。例如
function login()
{
if($this->Auth->data['User']['username']!=null)
{
//your code;
}
}
- array $fields = array(‘username’ => ‘username’, ‘password’ => ‘password’) 它允许我们告诉身份验证组件需要根据哪个模型字段来验证用户。默认情况下是用户名和密码。但假设如果有人在数据库表中拥有 email 和 secret_word 字段,并且他希望使用这些字段进行身份验证,那么我们就需要这个变量。例如
function beforeFilter()
{
$this->Auth->fields=array('username'=>'email','password'=>'secret_word');
}
- mixed $loginAction = null 该变量保存登录操作的 URL,默认情况下是 login()。但如果我们拥有其他处理登录过程的函数,那么我们需要在该变量中提供路径。我们可以使用字符串或数组来设置 URL。例如
function beforeFilter()
{
//using string
$this->Auth->loginAction="/users/authenticate";
//or using array notation
$this->Auth->loginAction=array('controller'=>'users','action'=>'authenticate');
}
- string $loginError = null 用户登录失败时显示的错误。出于安全原因,所有登录失败都使用一个错误,以避免泄露登录失败原因的信息。但我们也可以在登录系统中自定义它。在视图中输出它时,我们需要使用会话助手,例如 <?phpecho$this->Session->flash(‘Auth’);?> 例如
function beforeFilter()
{
$this->Auth->loginError="Username or password entered is incorrect. Please try again.";
}
- mixed $loginRedirect = null 通常情况下,如果用户被重定向到 $loginAction 页面,他们被重定向的位置将被存储在会话中,以便他们在成功登录后被重定向回该位置。如果此会话值未设置,则用户将被重定向到 $loginRedirect 中指定的页面。例如
function beforeFilter()
{
$this->Auth->loginRedirect=array('controller'=>'users','action'=>'profile');;
}
- mixed $logoutRedirect = null 它保存用户注销 Web 应用程序后要调用的默认操作的 URL。此 URL 将从身份验证组件的 logout() 返回。例如
function beforeFilter()
{
$this->Auth->logoutRedirect=array('controller'=>'pages','action'=>'home');
}
- string $userModel = ‘User’ 假设你将用户保存在名为 Clients 或 People 的数据库表中,那么我们需要将它指定给身份验证组件,以便它能够相应地进行验证。如果我们没有提供此信息,它将查找用户表,这样是不正确的。例如
function beforeFilter()
{
$this->Auth->userModel="clients";
}
- array $userScope = array() 我发现这是最常用的变量之一。那么它可以在哪里使用呢?基本上,身份验证组件只使用用户名和密码进行验证。但假设你有三个字段,例如 usertype、username 和 password,那么这个变量非常有用。让我们看看它是如何使用的。以下代码只会验证管理员类型用户。另一个用途可能是检查用户是否已激活,方法与下面类似。只需将 ` ‘User.usertype’=>”admin”` 替换为 ` ‘User.activated’=>”1”` 例如
function beforeFilter()
{
$this->Auth->userScope = array(
'User.usertype' => "admin"
);
}
最后的话…
在本篇文章中,我们浏览了不同的变量(虽然这并非所有变量的完整列表),这些变量可用于自定义身份验证组件的行为。下一篇文章将介绍身份验证组件的函数。