📜  cakephp 4 认证 - PHP (1)

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

CakePHP 4 认证 - PHP

CakePHP 4 认证是一个有用的组件,可以帮助您为您的 CakePHP 4 应用程序添加基于角色的访问控制和用户身份验证。

官方文档

如果您想了解更多信息,请参考 官方文档

安装

您可以使用 Composer 安装组件。在您的应用程序的命令行中,输入以下命令:

composer require cakephp/authentication

这会在你的 composer.json 文件中添加一个依赖项。现在,您可以在 CakePHP 应用程序中使用 BaseAuthenticate 类和 AuthenticationComponent 组件。

使用

要使用 CakePHP 认证,您需要首先定义一个用户模型和一个用户表。用户模型应该是 Cake\ORM\Entity 的子类。

然后,您需要为您的模型创建身份验证适配器。这个适配器需要继承 BaseAuthenticate 类,并实现 authenticate() 方法。

<?php
namespace App\Auth;

use Authentication\Authenticator\AbstractAuthenticator;
use Authentication\Authenticator\Result;
use Authentication\Authenticator\ResultInterface;
use Authentication\Identifier\IdentifierInterface;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\RequestHandlerInterface;

class CustomAuthenticator extends AbstractAuthenticator
{
    // ... methods ...

    public function authenticate(ServerRequestInterface $request): ResultInterface
    {
        $email = $request->getData('email');
        $password = $request->getData('password');

        $userEntity = $this->findUser($email, $password);
        if (!$userEntity) {
            return new Result(null, Result::FAILURE_CREDENTIALS_MISSING);
        }

        return new Result($userEntity, Result::SUCCESS);
    }

    // ... more methods ...
}

接下来,您需要定义一些基于角色的访问控制规则。这可以通过为您的控制器添加继承 AuthorizationControllersrc\Controller\AppController.php 文件来完成。

<?php
namespace App\Controller;

use Cake\Controller\Controller;
use Cake\Event\EventInterface;

class AppController extends Controller
{
    use \Authorization\Traits\AuthorizationTrait;

    public function initialize(): void
    {
        $this->loadComponent('RequestHandler');
        $this->loadComponent('Flash');
        $this->loadComponent('Authentication.Authentication');
    }

    public function beforeFilter(EventInterface $event)
    {
        $this->Authorization->authorize($this->Authentication->getIdentity());
    }
}

最后,您需要在您的应用程序的 src\Application.php 文件中配置 AuthenticationComponent 组件:

<?php
namespace App;

use Authentication\AuthenticationService;
use Authentication\AuthenticationServiceInterface;
use Authentication\Identifier\IdentifierInterface;
use Authentication\Middleware\AuthenticationMiddleware;
use Authorization\AuthorizationServiceInterface;
use Cake\Http\BaseApplication;
use Cake\Http\MiddlewareQueue;
use Cake\Routing\Middleware\RoutingMiddleware;

class Application extends BaseApplication
{
    // ... methods ...

    public function middleware(MiddlewareQueue $middlewareQueue): MiddlewareQueue
    {
        $middlewareQueue
            ->add(new RoutingMiddleware($this))
            ->add(new AuthenticationMiddleware($this->getAuthenticationService()));

        return $middlewareQueue;
    }

    public function getAuthenticationService(): AuthenticationServiceInterface
    {
        $service = new AuthenticationService();

        // Define your identifiers
        $service->loadIdentifier('Authentication.Password', [
            'fields' => [
                'username' => 'email',
                'password' => 'password'
            ]
        ]);

        // Define your authenticators
        $service->loadAuthenticator('Authentication.Form', [
            'fields' => [
                'username' => 'email',
                'password' => 'password',
            ]
        ]);

        // Add the authenticators and identifiers to the service
        $service->loadAuthenticator('Authentication.Session');

        return $service;
    }
}

现在您已准备好使用您的 CakePHP 4 应用程序中的认证和访问控制功能。