Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在Bolt cms中实现自定义用户/登录提供程序_Php_Bolt Cms - Fatal编程技术网

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

Php 在Bolt cms中实现自定义用户/登录提供程序,php,bolt-cms,Php,Bolt Cms,我目前正在评估更改Bolt用户提供程序和关联视图以使用某些自定义用户/登录服务的选项。到目前为止,我似乎不得不修改Bolt源代码的一些核心元素,这显然是一个错误的选择: 将用户服务替换为自定义类(相同界面) 更改/扩展后端类,因为它正在路由和呈现关联视图本身 关于如何在对核心源代码影响最小的情况下实现这一点,您有什么想法吗?很多想法都取决于您希望更改的程度,但正如您提到的,在Silex中交换服务非常容易,您需要做的是: <?php namespace Custom; use Bolt\

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

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

关于如何在对核心源代码影响最小的情况下实现这一点,您有什么想法吗?

很多想法都取决于您希望更改的程度,但正如您提到的,在Silex中交换服务非常容易,您需要做的是:

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

由于Bolt服务体系结构目前没有覆盖certian核心功能所需的那么干净,而且由于目前正在为Symfony 5 Flex重写它,因为path目前并不真正可行

但是!两个月以来,博尔特的用户服务中出现了一种新的
loginAsUser
方法。现在,您可以选择使用Bolt的user Repostory创建自己的用户,然后作为该用户登录

以下是一些示例代码snippet,您可以在扩展中进行调整和使用:

注意:这是不完整的示例代码。由于修改/绕过登录系统是riskay,建议您充分阅读和理解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);
因为后端控制器(呈现管理视图)本身在做登录视图,我想我也必须在那里做同样的事情?
$event = new AccessControlEvent($request);
$this->login()->loginAsUser($user->getEmail(), $event);
$token = $this->session()->get('authentication');
$response = $this->setAuthenticationCookie($request, $response, (string) $token);