📜  cakephp 登录会话 - PHP (1)

📅  最后修改于: 2023-12-03 15:29:55.949000             🧑  作者: Mango

CakePHP 登录会话 - PHP

CakePHP 是一个基于 PHP 的免费开源 Web 应用程序框架,它使用了MVC模式,提供了一组用于快速开发 Web 应用的经典模式和结构。今天我们将学习如何在CakePHP中实现登录会话。

准备工作

在开始之前,需要确保你已经安装好了 CakePHP 框架。如果你还没有安装,请先在你的 PHP 服务器上安装 CakePHP,并创建一个新的 CakePHP 应用程序。

创建登录表单

首先,我们需要在应用程序中创建登录表单。这可以通过以下步骤完成:

  1. src/Template/Pages 目录下创建一个名为 login.ctp 的新文件。这是我们将要使用的登录表单的视图。

  2. login.ctp 文件中添加以下代码片段,完成 Login 表单的开发:

<?= $this->Form->create() ?>
<?= $this->Form->control('email') ?>
<?= $this->Form->control('password') ?>
<?= $this->Form->submit('Login') ?>
<?= $this->Form->end() ?>

这段代码使用了 CakePHP 的表单助手方法来创建一个包含用户邮箱和密码输入框的表单,并添加了一个提交按钮。当用户点击提交按钮时,表单将被提交到服务器。

验证表单数据

在用户提交表单后,我们需要在服务器端验证表单数据。已经内置了验证表单数据的多种方法,本文将展示如何验证用户输入。按照以下步骤进行:

  1. 打开 src/Model/Table/UsersTable.php 文件。

  2. 添加以下代码:

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() 的新函数。

  1. 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 进行身份验证,如果验证通过,将会被重定向到主页。如果未通过验证,则会显示错误消息。

  1. app.php 配置文件的 middleware 选项中添加以下内容:
'Auth' => [
    'storage' => 'Memory',
    'authenticate' => [
        'Form' => [
            'fields' => [
                'username' => 'email',
                'password' => 'password'
            ]
        ]
    ],
    'loginAction' => [
        'controller' => 'Users',
        'action' => 'login'
    ]
],

这段代码配置了身份验证中间件,用于处理用户登录和注销操作。它还设置了默认的登录行为,例如,用户在未登录时访问受限页面时,将自动重定向到登录页面。

结论

通过本文,你已经学会了如何在 CakePHP 中实现用户登录功能。您现在可以创建自己的 CakePHP 应用程序,实现用户身份验证和会话管理。

参考资料