[英]Implementing custom user/login provider into Bolt cms
我目前正在評估更改 Bolt 用戶提供程序和相關視圖以使用某些自定義用戶/登錄服務的選項。 到目前為止,我似乎不得不修改 Bolt 源代碼的一些核心元素,這顯然是一個糟糕的選擇:
Users
服務(相同的接口)Backend
類,因為它本身正在路由和呈現關聯的視圖關於如何在對核心源代碼影響最小的情況下進行的任何想法?
這很大程度上取決於您想要更改多少,但正如您提到的,在 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 方法。
由於 Bolt 服務架構目前不像覆蓋 certian 核心功能所需的那樣干凈,並且因為它目前正在為 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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.