将自定义用户/登录提供程序实现到Bolt cms中

时间:2015-01-27 11:03:59

标签: php bolt-cms

我目前正在评估更改Bolt用户提供程序和关联视图以使用某些自定义用户/登录服务的选项。到目前为止,似乎我必须修改Bolt源代码的一些核心元素,这显然是一个糟糕的选择:

  • Users服务替换为自定义类(相同界面)
  • 更改/扩展Backend类,因为它正在路由并呈现关联的视图本身

关于如何应对核心源代码影响最小的任何想法?

2 个答案:

答案 0 :(得分:3)

很多这取决于你想要改变多少,但正如你提到在Silex中交换服务非常容易,你需要做的就是:

<?php
namespace Custom;
use Bolt\Users;
// src/Custom/UserService
class UserService extends Users {}

然后在你的引导程序中执行以下操作。

<?php
// public/index.php
require_once "../vendor/autoload.php";
$configuration = new Bolt\Configuration\Composer(dirname(__DIR__));
$app = new Bolt\Application(array('resources'=>$configuration));
$app['users'] = new Custom\UserService($app);
$app->initialize();
$app->run();

现在,您的自定义用户服务可以决定要覆盖哪个核心Bolt方法。

答案 1 :(得分:0)

由于Bolt服务体系结构目前尚不具备覆盖证书核心功能所需的清洁度,并且由于它目前正在为Symfony 5 Flex进行重写,因此路径目前尚不可行。

但是!几个月以来,Bolt的用户服务中有了新的loginAsUser方法。现在,您可以选择使用Bolt的用户资料创建自己的用户,然后以该用户身份登录。

以下是一些示例代码片段,您可以在扩展程序中使用它们:

注意:这是不完整的示例代码。由于修改/绕过登录系统存在风险,因此建议您充分阅读和理解Bolt的用户和身份验证服务。 另外,此代码使用的内部方法不用于扩展,并且可能会更改。后果自负,并使用谨慎的错误处理。

创建用户

/* @var Repository\UsersRepository $repository */
$repository = $this->app["storage"]->getRepository(Users::class);
$userEntity = new Users();
... set user attributes ...
$repository->save($userEntity);

以用户身份登录

$event = new AccessControlEvent($request);
$this->login()->loginAsUser($user->getEmail(), $event);
$token = $this->session()->get('authentication');
$response = $this->setAuthenticationCookie($request, $response, (string) $token);
相关问题