📅  最后修改于: 2023-12-03 15:14:05.365000             🧑  作者: Mango
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 ...
}
接下来,您需要定义一些基于角色的访问控制规则。这可以通过为您的控制器添加继承 AuthorizationController
的 src\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 应用程序中的认证和访问控制功能。