📅  最后修改于: 2023-12-03 15:29:55.949000             🧑  作者: Mango
CakePHP 是一个基于 PHP 的免费开源 Web 应用程序框架,它使用了MVC模式,提供了一组用于快速开发 Web 应用的经典模式和结构。今天我们将学习如何在CakePHP中实现登录会话。
在开始之前,需要确保你已经安装好了 CakePHP 框架。如果你还没有安装,请先在你的 PHP 服务器上安装 CakePHP,并创建一个新的 CakePHP 应用程序。
首先,我们需要在应用程序中创建登录表单。这可以通过以下步骤完成:
在 src/Template/Pages
目录下创建一个名为 login.ctp
的新文件。这是我们将要使用的登录表单的视图。
在 login.ctp
文件中添加以下代码片段,完成 Login 表单的开发:
<?= $this->Form->create() ?>
<?= $this->Form->control('email') ?>
<?= $this->Form->control('password') ?>
<?= $this->Form->submit('Login') ?>
<?= $this->Form->end() ?>
这段代码使用了 CakePHP 的表单助手方法来创建一个包含用户邮箱和密码输入框的表单,并添加了一个提交按钮。当用户点击提交按钮时,表单将被提交到服务器。
在用户提交表单后,我们需要在服务器端验证表单数据。已经内置了验证表单数据的多种方法,本文将展示如何验证用户输入。按照以下步骤进行:
打开 src/Model/Table/UsersTable.php
文件。
添加以下代码:
use Cake\Auth\DefaultPasswordHasher;
public function validationDefault(Validator $validator)
{
$validator
->notEmptyString('email', 'Please enter your email')
->email('email', false, 'Please enter a valid email')
->notEmptyString('password', 'Please enter your password')
->add('password', [
'compare' => [
'rule' => function ($value, $context) {
return !empty($context['data']['password']);
},
'message' => 'The passwords do not match.'
]
])
->add('password', [
'match' => [
'rule' => function ($value, $context) {
if (!empty($context['data']['password'])) {
$user = $this->find()
->where(['email' => $context['data']['email']])
->first();
if (!$user) {
return false;
}
return (new DefaultPasswordHasher)->check($value, $user->password);
}
return true;
},
'message' => 'The email or password you entered is incorrect.'
]
]);
return $validator;
}
这段代码添加了一个自定义验证规则,以确保用户输入了正确的电子邮件和密码。我们还验证了密码是否与用户账号中的密码匹配。
一旦完成了表单验证,我们需要处理用户提交的表单数据。为此,我们将在 UsersController.php
中创建一个名为 login()
的新函数。
src/Controller/UsersController.php
文件中添加以下代码:use App\Model\Table\UsersTable;
class UsersController extends AppController
{
public function login()
{
$this->request->allowMethod(['get', 'post']);
$userTable = new UsersTable();
if ($this->request->is('post')) {
$result = $userTable->validate($this->request->getData());
if ($result->isValid()) {
$user = $userTable->find()
->where(['email' => $this->request->getData('email')])
->first();
$this->Auth->setUser($user);
return $this->redirect('/');
}
$this->Flash->error(__('Invalid email or password, please try again.'));
}
}
}
该代码通过调用 validate()
方法验证表单数据,并使用 CakePHP 进行身份验证,如果验证通过,将会被重定向到主页。如果未通过验证,则会显示错误消息。
app.php
配置文件的 middleware
选项中添加以下内容:'Auth' => [
'storage' => 'Memory',
'authenticate' => [
'Form' => [
'fields' => [
'username' => 'email',
'password' => 'password'
]
]
],
'loginAction' => [
'controller' => 'Users',
'action' => 'login'
]
],
这段代码配置了身份验证中间件,用于处理用户登录和注销操作。它还设置了默认的登录行为,例如,用户在未登录时访问受限页面时,将自动重定向到登录页面。
通过本文,你已经学会了如何在 CakePHP 中实现用户登录功能。您现在可以创建自己的 CakePHP 应用程序,实现用户身份验证和会话管理。