Аутентификация удаленно проверенных учетных данных пользователя для бэкенда TYPO3

Мне нужна небольшая помощь при входе в систему от имени пользователя бэкэнда, чьи учетные данные были проверены удаленным сервером. Фактический пользователь и все его разрешения задаются в TYPO3, но пароль хранится на удаленном сервере.

Пока что я создал небольшое расширение, которое перенаправляет бэкэнд-логин моему провайдеру логина:

$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['backend']['loginProviders'][1433416747]['provider'] = \User\MyExtension\Hooks\LoginProvider::class;

где я проверяю комбинацию имени пользователя и пароля на удаленном сервере.

class LoginProvider implements LoginProviderInterface
{
public function render(StandaloneView $view, PageRenderer $pageRenderer, LoginController $loginController)
{

$view->setTemplatePathAndFilename(GeneralUtility::getFileAbsFileName('EXT:my_extension/Resources/Private/Templates/BELogin.html'));

// Check request
if (
isset($_POST['login_status'])
&& $_POST['login_status'] == 'login'
&& !empty($_POST['username'])
&& !empty($_POST['p_field'])
&& $_POST['interface'] == 'backend'
) {
// Get EXT connection data from settings
$EXT_CONFIG       = unserialize($GLOBALS['TYPO3_CONF_VARS']['EXT']['extConf']['my_extension']);
$this->extServer = $EXT_CONFIG['extServer'];
$this->extDC     = $EXT_CONFIG['extDC'];

// Assign received login data
$this->username = GeneralUtility::_GP('username');
$this->password = GeneralUtility::_GP('p_field');

// Try to authenticate
if ($this->checkCredentials()) {
// @TODO: Need to log in the verified user credentials!
}
}
}

private function checkCredentials()
{
// Check if local user exists
$local = $GLOBALS['TYPO3_DB']->exec_SELECTcountRows("uid", "be_users", "username='{$this->username}' AND disable=0") ?? 0;

// Check credentials and recieve user object if correct, or false if wrong
if ($local > 0) {
$ext           = new EXT($this->extServer, $this->extDC);
$this->extUser = $ext->authorize($this->username, $this->password);
}

return $this->extUser ? true : false;
}
}

Теперь мне нужно войти в систему проверенного пользователя, но не могу понять, как.

PS: я уже нашел BackendUserAuthentication, но это работает только после того, как пользователь уже аутентифицирован (или я не знаю, как использовать).

1

Решение

LoginProvider предназначен только для визуализации другой формы входа в систему (например, для openID, который не нуждается в поле пароля).

Вам необходимо реализовать сервис аутентификации: https://docs.typo3.org/typo3cms/Typo3ServicesReference/Authentication/Index.html

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]