2

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

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

关于如何在对核心源代码影响最小的情况下进行此操作的任何想法?

4

2 回答 2

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 方法。

于 2015-02-05T11:40:08.970 回答
0

由于 Bolt 服务架构目前还没有覆盖某些核心功能所需的干净,并且因为它目前正在为 Symfony 5 Flex 重写,因为路径现在并不可行。

但!几个月以来loginAsUser,Bolt 的用户服务中出现了一种新方法。您现在可以选择使用 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);
于 2020-08-10T09:39:49.427 回答