Eingeloggt bleiben nach Authentication Plugin

In diesem Forum kann man Fragen zur Programmierung stellen, die bei der Entwicklung von Mods für phpBB 3.0.x oder dem Modifizieren des eigenen Forums auftauchen.
Forumsregeln
phpBB 3.0 hat das Ende seiner Lebenszeit überschritten
phpBB 3.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 3.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf die neuste phpBB-Version, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Antworten
Gigagon
Mitglied
Beiträge: 2
Registriert: 28.11.2010 19:42

Eingeloggt bleiben nach Authentication Plugin

Beitrag von Gigagon »

Hallo phpBB-Gemeinde,

ich habe versucht ein Authentication Plugin für Contao zu erstellen. Mann kann sich mit einem bestehenden Contao User einloggen und bekommt die Meldung, dass es erfolgreich war. Leider ist man nach dem Klick auf den weiterleitungslink noch nicht, oder nicht mehr eingeloggt.
Im Forum und Internet hab ich nach langen Suchen nichts passendes gefunden.
Muss noch irgendwo ein session gestartet werden?
Ich habe schon versucht, den Inhalt von diesem Thema (klick) einzubinden, aber dann läd es nur noch und es passiert garnichts mehr.

Das ganze läuft auf einem XAMPP bei mir zu hause.

Mein Code sieht im Moment so aus:
(Ich weiss, man kann ihn noch optimieren, aber erstmal ist mir die Funktion an sich wichtig)

Code: Alles auswählen

function login_contao($username, $password) {

	// 1. Den Benutzer in Externer DB-Tabelle finden und auf richtige Daten überprüfen
	$idInContao = findUserInContao($username, $password);

	//Benutzer existiert in Contao
	if($idInContao != -1) {
	
		// 2. Den Benutzer in der DB-Tabelle von phpBB USERS_TABLE finden
		$user_id = findUserInPhpBb($username, $password);
		if($user_id != -1) {
			$status = LOGIN_SUCCESS;
			$error_msg = '';
			$user_row = getUserData($user_id, $password, $username);
		} else {
		
			
			$status = LOGIN_SUCCESS;
			$error_msg = '';
			$user_row = getUserInfoFromContao($username, $password);
		}
		
		//sessionStart($username, $password);
	} else {
		$user_id = findUserInPhpBb($username, $password);
		if($user_id != -1) {
			$status = LOGIN_SUCCESS;
			$error_msg = '';
			$user_row = getUserData($user_id, $password, $username);
			
		} else {	
			$status = LOGIN_ERROR_EXTERNAL_AUTH;
			$error_msg = '';
			$user_row = array('user_id' => ANONYMOUS);
		}
	}
	
	// 3. Meldung zurückgeben
	$rArray = array(
		'status' => $status,
		'error_msg' => $error_msg,
		'user_row' => $user_row);
	
	return $rArray;
}

function sessionStart($username, $password) {
	global $user, $auth;
	// Start session management
	//$user->session_begin();
	//$auth->acl($user->data);
	//$user->setup();


	$autologin = true;
	$viewonline = true;

	$logout  = request_var('mode', '');

	//Wenn username und passwort uebergeben worden sind, starte einen Anmeldeversuch
	if (isset($username) && isset($password)) {
    	$auth->login($username, $password, $autologin, $viewonline);
	}

	//Wenn ueber einen Link der mode=logout lautet und eine SID uebergeben wurde, starte das ausloggen des Users
	if ($logout == 'logout') {
    $user->session_kill();
	}
}


/******************** HILFS-FUNKTIONEN ********************/

function getUserData($user_id, $password, $username) {
	global $db;
	
	$tableName = "phpbb_users";
	$sql = "SELECT *
			FROM ". $tableName ."  
			WHERE user_id =  '". $db->sql_escape($userid) . "'";
	$result = $db->sql_query($sql);
	$row = $db->sql_fetchrow($result);
	$userdata = array('user_id' => $user_id,
								'username' => $username,
								'user_password' => phpbb_hash($password),
								'user_email' => $row['user_email'],
								'group_id' => $row['group_id'],
								'user_type' => $row['user_type']);	
	
	return $userdata;
}

/**
 * Sucht in der User Tabelle von phpBB nach dem Benutzer
 */
function findUserInPhpBb($username, $password) {
	global $db;
	$tableName = "phpbb_users";
	$sql = "SELECT username, user_id
			FROM ". $tableName ."  
			WHERE username =  '". $db->sql_escape($username) . "'";
	$result = $db->sql_query($sql);
	$row = $db->sql_fetchrow($result);
	$usernameInDB = $row['username'];	
	$userIdInDB = $row['user_id'];
	
	$user_id = -1;
	if($username == $usernameInDB) {
		$user_id = $userIdInDB;
	}
	
	return $user_id;
}

/**
 * Sucht in der Tabelle von Contao, ob Benutzer vorhanden und Passwort stimmt.
 * Gibt True zurück, sollte alles stimmen, ansonsten false
 */
function findUserInContao($username, $password) {
	global $db;
	$tableName = "tl_user";
	
	// Verschlüsselung von Contao
	$sql = "SELECT password, id
			FROM ". $tableName ."  
			WHERE username =  '". $db->sql_escape($username) . "'";
	$result = $db->sql_query($sql);
	$row = $db->sql_fetchrow($result);
	$passInDB = $row['password'];
	$idInDB = $row['id'];
	
	// $passInDB = Inhalt aus tl_user "password"
	$tlPassword = explode(":", $passInDB);		// Password und Salt trennen
	$strSalt = $tlPassword[1];					// Salt
	
	// eingegebenes Passwort verschlüsseln
	$strPassword = sha1($strSalt . $password);	// Passwort mit Salt und SHA1 verschlüsseln
	$insertPassword = $strPassword . ':' . $strSalt;		// Passwort und Salt (durch : getrennt)
	
	$user_id = -1;
	if($passInDB == $insertPassword) {
		$user_id = $idInDB;
	}
	
	return $user_id;
}

function getUserInfoFromContao($username, $password) {
	global $db, $user;
	
	$tableName = "tl_user";
	$user_id = findUserInContao($username, $password);
	
	if($user_id != -1) {
		// Verschlüsselung von Contao
		$sql = "SELECT *
				FROM ". $tableName ."  
				WHERE id =  '". $db->sql_escape($user_id) . "'";
		$result = $db->sql_query($sql);
		$row = $db->sql_fetchrow($result);	

	
		
		$user_email = $row['email'];
		$group_id = 1;
		$user_type = 2;
		$user_actkey = md5(rand(0, 100) . time());
		$user_actkey = substr($user_actkey, 0, rand(8, 12));	
		$user_ip = $user->ip;	
		$user_lang = $row['language'];
		$registration_time = $row['dateAdded'];
		$user_inactive_reason = INACTIVE_REGISTER;
 
		// time since the user is inactive. timestamp.
		$user_inactive_time = time();
	
		$user_row = array(
			'username'              => $username,
			'user_password'         => phpbb_hash($password),
			'user_email'            => $user_email,
			'group_id'              => (int) $group_id,
			'user_timezone'         => (float) $timezone,
			'user_dst'              => $is_dst,
			'user_lang'             => $user_lang,
			'user_type'             => $user_type,
			'user_actkey'           => $user_actkey,
			'user_ip'               => $user_ip,
			'user_regdate'          => $registration_time,
			'user_inactive_reason'  => $user_inactive_reason,
			'user_inactive_time'    => $user_inactive_time,
		);		
		
		$user_id = user_add($user_row);
		$user_row['user_id'] = $user_id;
		
		return $user_row;
	} else {
		return null;
	}
}
Ich wäre für jede Hilfe dankbar, denn mit dem Wiki komm ich auch nicht mehr weiter...


Gigagon
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Re: Eingeloggt bleiben nach Authentication Plugin

Beitrag von Pyramide »

Falls der Benutzer in phpBB noch nicht existiert, musst du LOGIN_SUCCESS_CREATE_PROFILE (statt LOGIN_SUCCESS) zurückgeben.
KB:knigge
Gigagon
Mitglied
Beiträge: 2
Registriert: 28.11.2010 19:42

Re: Eingeloggt bleiben nach Authentication Plugin

Beitrag von Gigagon »

Hi Pyramide

danke für deinen Tipp, hat mir sehr geholfen und ich habe es soweit geschafft, dass man sich einloggen kann.

Gibt es auch ne Möglichkeit auf die Bearbeitung eines Benutzerprofiels zu reagieren, sodass ich die Daten z.B. in eine andere Tabelle schreiben kann?
Antworten

Zurück zu „[3.0.x] Mod Bastelstube“