错字3:在FE登录上创建用户

时间:2018-07-10 09:42:11

标签: php login typo3 frontend createuser

情况:
我构建了一个使用基本身份验证的身份验证服务,以检查用户是否存在于外部数据库中并获取一些数据。有问题的用户仅存在于外部数据库上。

问题:
Typo3需要在fe_user表中具有一个用户条目才能登录该用户。 因此,只要该条目不存在,用户就无法登录。

我想做什么:
在身份验证服务中创建用户,以避免使用来自外部数据库的sql转储,并确保可以进行同步。

相关代码:

public function authUser(array $user) {
    $a_user = $this->login['uname'];
    $a_pwd = $this->login['uident_text'];
    $url = 'https://soliday.fluchtpunkt.at/api/queryMediaItems';
    $data = json_decode('{"language":"de-at"}');
    $basicAuth = base64_encode("$a_user:$a_pwd");

    // use key 'http' even if you send the request to https://...
    $options = array (
            'http' => array (
                    'header' => array(
                                "Content-Type: application/json",
                                "Accept: application/json",
                                "Authorization: Basic {$basicAuth}"
                            ),
                    'method' => 'POST',
                    'content' => '{"language":"de-at"}'
            ) 
    );
    $context = stream_context_create ( $options );
    $result = file_get_contents ($url, false, $context);
    $response = gzdecode($result);
    $checkUser = $this->fetchUserRecord ( $this->login ['uname'] );
    if (!is_array($checkUser)&& $result!== FALSE) {
        $this->createUser();
    }
    // failure
    if ($result === FALSE) {
        return static::STATUS_AUTHENTICATION_FAILURE_BREAK;
    }
    $this->processData($response);

    // success
    return static::STATUS_AUTHENTICATION_SUCCESS_BREAK;
}

public function createUser() {
    $username = $this->login ['uname'];
    $password = $this->login ['uident_text'];
    $record = $GLOBALS ['TYPO3_DB']->exec_SELECTgetSingleRow ( '*', 'fe_users', "username = '" . $username . "' AND disable = 0 AND deleted = 0" );
    if (! $record) {
        // user has no DB record (yet), create one using defaults registered in extension config
        // password is not important, username is set to the user's input
        $record = array (
                'username' => $username,
                'password' => $password,
                'name' => '',
                'email' => '',
                'disable' => '0',
                'deleted' => '0',
                'pid' => $this->config ['storagePid'],
                'usergroup' => $this->config ['addUsersToGroups'],
                'tstamp' => time () 
        );
        if (t3lib_extMgm::isLoaded ( 'extbase' )) {
            $record ['tx_extbase_type'] = $this->config ['recordType'];
        }
        $GLOBALS ['TYPO3_DB']->exec_INSERTquery ( 'fe_users', $record );
        $uid = $GLOBALS ['TYPO3_DB']->sql_insert_id ();
        $record = $GLOBALS ['TYPO3_DB']->exec_SELECTgetSingleRow ( '*', 'fe_users', 'uid = ' . intval ( $uid ) );
    }
    $_SESSION [$this->sessionKey] ['user'] ['fe'] = $record;
}

ext_localconf.php文件:

   <?php
if (!defined('TYPO3_MODE')) {
    die ('Access denied.');
}

\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addService(
    $_EXTKEY,
    'auth' /* sv type */,
    'AuthService' /* sv key */,
    array(
        'title' => 'GET Authentication service',
        'description' => 'Authenticates users with GET request.',

        'subtype' => 'getUserFE, authUserFE',

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

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

        'className' => Plaspack\professionalZoneLogin\Service\AuthService::class,
    )
);

2 个答案:

答案 0 :(得分:0)

您应该使用自己的代码扩展AuthenticationService,https://docs.typo3.org/typo3cms/CoreApiReference/ApiOverview/Xclasses/Index.html

答案 1 :(得分:0)

不确定是否相关,但是除非您使用的是TYPO3 6,否则t3lib_extMgm应该是\TYPO3\CMS\Core\Utility\ExtensionManagementUtility

您还可以通过调用$GLOBALS['TYPO3_DB']->sql_error()来查看是否遇到任何SQL错误。