我目前正在评估更改Bolt用户提供程序和关联视图以使用某些自定义用户/登录服务的选项。到目前为止,似乎我必须修改Bolt源代码的一些核心元素,这显然是一个糟糕的选择:
Users
服务替换为自定义类(相同界面)Backend
类,因为它正在路由并呈现关联的视图本身关于如何应对核心源代码影响最小的任何想法?
答案 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);