TYPO3 - AuthenticationService - PullRequest
       21

TYPO3 - AuthenticationService

0 голосов
/ 10 января 2019

Я хотел бы реализовать логин на TYPO3 v8.7. Это происходит из-за того, что данные поступают от иностранного провайдера, который должен автоматически войти в систему, используя свои данные для входа в систему на TYPO3. Я разработал что-то для этого.

Что не так?

// Authentication Service
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addService(
    $_EXTKEY,
    'auth',
    'TEST\\Tests\\Service\\AuthenticationService',
    array(
        'title' => 'User authentication service',
        'description' => 'Authentication with username',

        'subtype' => 'getUserFE, authUserFE',

        'available' => true,
        'priority' => 90,
        'quality' => 90,

        'os' => '',
        'exec' => '',

        'className' => 'TEST\\Tests\\Service\\AuthenticationService',
    )
);

Это в ext_localconf.php

class AuthenticationService extends \TYPO3\CMS\Sv\AuthenticationService

{

function init() {
    $available = parent::init();
    return $available;
}

public function getUser(){

    $remoteUser = $this->getRemoteUser();

    $user = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows(
        '*',
        'fe_users',
        'username = '.$GLOBALS['TYPO3_DB']->fullQuoteStr($remoteUser, 'fe_users') . ' AND deleted = 0'
    );

    return $user;
}

public function authUser($user)
{
    $userData = $user[0];

    foreach ($user[0] as $item => $key) {
        if (is_numeric($key)) {
            $result_array[$item] = (int) $key;
        } else {
            $result_array[$item] = $key;
        }
    }

    $this->login = $loginData = array(
        'uname' => $userData["username"],
        'uident_text' => $userData['password'],
        'status' => 'login'
    );

    $ok = $this->compareUident($result_array, $loginData);

    if($ok == 1) {
        return 200;
    }
    return 100;
}

/**
 * Returns the remote user.
 *
 * @return string
 */
protected function getRemoteUser()
{
    [...]

    return $user;
}

}

Это хорошо, что я делаю? В функции «remoteUser» я получаю имя пользователя стороннего провайдера.

При каждом вводе параметра GET запускается служба AuthService. Однако я получаю следующее сообщение об ошибке:

"updateLoginTimestamp () должен иметь тип integer, значение NULL"

К сожалению, я не нахожу ошибку, которую я делаю. Отсюда мой вопрос, если кто-нибудь видит, где это?

1 Ответ

0 голосов
/ 11 января 2019

Метод getUser() должен возвращать массив записей пользователя

, что соответствует строке базы данных fe_users

Я предполагаю, что нет существующего fe_user для имени пользователя, которое вы получаете от getRemoteUser, таким образом, его задачей службы аутентификации является создание / обновление записи для этого пользователя в таблице fe_users.

так что пошагово ваш сервис должен следовать следующим шагам в получить пользователя: 1. получить удаленное имя пользователя 2. проверьте, существует ли удаленное имя пользователя в таблице fe_users 3. если нет, создайте новую запись для Удаленного имени пользователя в fe_users 4. выберите запись Remote Username из fe_users и верните строку.

...