TYPO3-Testaccount
Testen Sie die aktuellste TYPO3-Version kostenlos und unverbindlich für einen Monat!

Jetzt testen!

Schulungen

Eigener Auth Service wird nicht benutzt


Autor Nachricht
Verfasst am: 24. 04. 2012 [14:53]
dmarkus
Themenersteller
Dabei seit: 13.12.2011
Beiträge: 2
Hallo an alle!
Ich hab folgendes Problem: ich möchte dass beim Einloggen der Benutzer deren Daten gegen eine externe Datenbank abgeglichen werden. Im Falle des Erfolgs sollen die Benutzer auf denselben FE User gemappt werden und somit Zugang zu einem geschützten Bereich der Seite bekommen. Das Problem ist, dass mein auth Service nicht von Typo3 genutzt wird, denn ich habe mal bei der getUser Methode statisch einen Text ausgeben lassen - dieser wird nicht angezeigt. Daraus schließe ich, dass Typo3 weiterhin den eigenen Service verwendet anstatt meinen. Weiß jemand wo das Problem liegen könnte? Ich bin für jede Hilfe dankbar!

Viele Grüße
Daniel

Hier der Inhalt meiner ext_localconf.php


PHP
<?php
if (!defined('TYPO3_MODE')) {
        die ('Access denied.');
}
 
t3lib_extMgm::addService($_EXTKEY, 'auth',  'tx_feimapauth_sv1',
        array(
                'title' => 'Imap FE Auth',
                'description' => '',
 
                'subtype' => 'getUserFE,authUserFE,getGroupsFE',
 
                'available' => TRUE,
                'priority' => 80,
                'quality' => 80,
 
                'os' => '',
                'exec' => '',
 
                'classFile' => t3lib_extMgm::extPath($_EXTKEY).'sv1/class.tx_feimapauth_sv1.php',
                'className' => 'tx_feimapauth_sv1',
        )
);
?>
Profil
Verfasst am: 28. 04. 2012 [10:34]
wwwowtschik
Dabei seit: 26.04.2012
Beiträge: 8
PHP
Hallo,
das sollte funktionieren, getestet mit TYPO 4.6 und 4.7.
 
-----------------
 
Hier meine ext_localconf.php:
 
t3lib_extMgm::addService($_EXTKEY,  'auth' /* sv type */,  'tx_myext_sv1' /* sv key */,
array(
	'title' => 'MyExample-Service',
	'description' => 'Authenticates against something different from TYPOs database!!!',
	'subtype' => 'authUserFE,getUserFE',
	'available' => TRUE,
	'priority' => 80,
	'quality' => 80,
	'os' => '',
	'exec' => '',
	'classFile' => t3lib_extMgm::extPath($_EXTKEY).'sv1/class.tx_myext_sv1.php',
	'className' => 'tx_myext_sv1',
));
 
-----------------
 
Die Auth-Klasse:
 
<?php
 
require_once(PATH_t3lib.'class.t3lib_svbase.php');
 
class tx_myext_sv1 extends tx_sv_authbase {
 
	var $prefixId = 'tx_myext_sv1';		// Same as class name
	var $scriptRelPath = 'sv1/class.tx_myext_sv1.php';	// Path to this script relative to the extension dir.
	var $extKey = 'myext_sv1';	// The extension key.
 
	function init()	{
		$available = parent::init();
 
		// Here you can initialize your class.
 
		// The class have to do a strict check if the service is available.
		// The needed external programs are already checked in the parent class.
 
		// If there's no reason for initialization you can remove this function.
 
		return $available;
	}
 
	function process($content='', $type='', $conf=array())	{
 
		// Depending on the service type there's not a process() function.
		// You have to implement the API of that service type.
 
		return FALSE;
	}
 
	function getUser() {
		$user = false;
 
		if ($this->login['status']=='login' && $this->login['uident'])	{			
			$GLOBALS['TSFE']->sys_page = t3lib_div::makeInstance('t3lib_pageSelect');
 
			$result = // ABFRAGE DER BENUTZER AUF DEINER TABELLE ($this->login['uname'], $this->login['uident'])
			if($result->count() > 0) { // Benutzer gefunden 				
				$user = $this->fetchUserRecord('mydummyuser1'); // LADE DUMMY BENUTZER DIESER MUSS EXISTIEREN
				$user['username'] = $this->login['uname']; // MAPPE DIE GELADENEN DATEN DES DUMMY BENUTZERS
         		        $user['password'] = $this->login['uident'];
			}
		}	
		return $user;
	}
 
	function authUser($user) {
 
		// return values:
		// 200 - authenticated and no more checking needed - useful for IP checking without password
		// 100 - Just go on. User is not authenticated but there's still no reason to stop.
		// false - this service was the right one to authenticate the user but it failed
		// true - this service was able to authenticate the user	
		$OK = 200;
		if ($this->login['uident'] && $this->login['uname'] && $user != false)	{
			$OK = $this->compareUident($user, $this->login); // true if login-data matched
		}
 
		return $OK;
	}
}
 
 
 
if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/myext_auth/sv1/class.tx_myextauth_sv1.php'])	{
	include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/myext_auth/sv1/class.tx_myextauth_sv1.php']);
}
 
?>
 
--------------------
 
Wichtig der DUMMY-USER muss natürlich in der Tabelle fe_users mit passender PID angelegt sein. 
Die Auth-Klasse liegt unter typo3conf\ext\myext\sv1\class.tx_myext_sv1.php
Typo3 - Cache löschen nicht vergessen.
 
Viel Erfolg!


[Dieser Beitrag wurde 1mal bearbeitet, zuletzt am 29.04.2012 um 10:55.]
Profil
Verfasst am: 07. 11. 2012 [17:53]
sini
Dabei seit: 15.01.2008
Beiträge: 67
Hallo wwwowtschik,

ist für die letzte Funktion noch was zu beachten, sowas wie bespielsweise, dass auch die saltedpasswords verwendet werden?

PHP
<?php function authUser($user) {
 
		// return values:
		// 200 - authenticated and no more checking needed - useful for IP checking without password
		// 100 - Just go on. User is not authenticated but there's still no reason to stop.
		// false - this service was the right one to authenticate the user but it failed
		// true - this service was able to authenticate the user	
		$OK = 200;
		if ($this->login['uident'] && $this->login['uname'] && $user != false)	{
                        echo "innerhalb";
			$OK = $this->compareUident($user, $this->login); // true if login-data matched
		}
 
		return $OK;
	}


ich hab mal getestet und befinde mich eigentlich innerhalb der if-schleife, nur die zuweisung zur $OK-Variable führt leider nicht zum erfolgreichen login...

erfolgreich ist nur, wenn ich eine $OK = 200 zuweise, $OK = true loggt den User nicht ein. Hast du da vielleicht einen tollen Tipp für mich? lg

[Dieser Beitrag wurde 2mal bearbeitet, zuletzt am 07.11.2012 um 18:29.]
ProfilWWW
Verfasst am: 07. 11. 2012 [19:06]
wwwowtschik
Dabei seit: 26.04.2012
Beiträge: 8
sini schrieb:

Hallo wwwowtschik,

ist für die letzte Funktion noch was zu beachten, sowas wie bespielsweise, dass auch die saltedpasswords verwendet werden?

PHP
<?php function authUser($user) {
 
		// return values:
		// 200 - authenticated and no more checking needed - useful for IP checking without password
		// 100 - Just go on. User is not authenticated but there's still no reason to stop.
		// false - this service was the right one to authenticate the user but it failed
		// true - this service was able to authenticate the user	
		$OK = 200;
		if ($this->login['uident'] && $this->login['uname'] && $user != false)	{
                        echo "innerhalb";
			$OK = $this->compareUident($user, $this->login); // true if login-data matched
		}
 
		return $OK;
	}


ich hab mal getestet und befinde mich eigentlich innerhalb der if-schleife, nur die zuweisung zur $OK-Variable führt leider nicht zum erfolgreichen login...

erfolgreich ist nur, wenn ich eine $OK = 200 zuweise, $OK = true loggt den User nicht ein. Hast du da vielleicht einen tollen Tipp für mich? lg



Versuche mit
PHP
$TYPO3_CONF_VARS['FE']['loginSecurityLevel']  = 'normal';
in localconf.php
Profil
Verfasst am: 09. 11. 2012 [09:12]
sini
Dabei seit: 15.01.2008
Beiträge: 67
Vielen Dank, dann weiss ich schon mal dass es an der rsa-extension liegt, direkt deaktivieren kann ich sie leider nicht, weil ich auch sr_feuser_register zur Registrierung im Einsatz hab, die dann auch Daten an die externe Quelle sendet.
ProfilWWW