0

我想在 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() 必须是整数类型,给定 null”

不幸的是,我没有发现我犯的错误。因此我的问题是,如果有人看到这是哪里?

4

1 回答 1

0

getUser()方法应返回用户记录的数组

这等于数据库行fe_users

我猜您从 getRemoteUser 获得的用户名没有现有的 fe_user,因此身份验证服务的工作是在表 fe_users 中为该用户创建/更新记录。

因此,以更一步一步的方式,您的服务应在获取用户中遵循以下步骤: 1. 获取远程用户名 2. 检查远程用户名是否存在于 fe_users 表中 3. 如果不存在,则在 fe_users 中为远程用户名创建一个新条目 4. 选择从 fe_users 输入远程用户名并返回该行。

于 2019-01-11T08:45:40.930 回答