Eingeloggt bleiben nach Authentication Plugin
Verfasst: 28.11.2010 19:53
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)
Ich wäre für jede Hilfe dankbar, denn mit dem Wiki komm ich auch nicht mehr weiter...
Gigagon
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;
}
}
Gigagon