TYPO3-AuthenticationService

时间:2019-01-10 19:06:58

标签: authentication typo3-8.x felogin

我想在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”

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

1 个答案:

答案 0 :(得分:0)

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

等于fe_users的数据库行

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

因此,您的服务应以逐步的方式逐步执行以下步骤 在获取用户:  1.获取远程用户名  2.检查fe_users表中是否存在远程用户名  3.如果未在fe_users中为“远程用户名”创建新条目  4.从fe_users中选择“远程用户名”条目,然后返回该行。