Seite 1 von 1
User Authentifizierung übernehmen
Verfasst: 30.10.2006 12:39
von Demonllama
Ich habe in eurer Dokumentation den Artikel gefunden um die User-Login-Informationen für eigene Seiten abzufragen.
Jetzt habe ich mir daraus ein kleines Testscript geschrieben und das sagt mir immer, das aktuell kein Benutzer angemeldet sei.
Das verwundert mich, da zumindest ein Cookie mit meinem Benutzer gesetzt ist.
Was mache ich falsch?
Code: Alles auswählen
<?php
//Benötigte Dateien und Variablen von phpBB
define('IN_PHPBB', true);
$phpbb_root_path = '../../forum/';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);
//Session auslesen und Benutzer-Informationen laden
$userdata = session_pagestart($user_ip, PAGE_INDEX);
init_userprefs($userdata);
echo ("$userdata[user_id]<br>$userdata[username]<br>$userdata[session_id]<br>$userdata[session_logged_in]");
if ($userdata['session_logged_in'])
{
echo("<br><br>Benutzer ist angemeldet!");
}
else
{
echo("<br><br>Benutzer ist nicht angemeldet!");
}
?>
Das board ist phpBB2 Version 2.0.19 von phpBB.com
Getestet wurde mit IE 6.0 und Firefox 1.5.0.4 hinter einem Proxy.
Verfasst: 30.10.2006 14:38
von gn#36
Die Abfrage dieser Daten bedeutet ja nicht zwingend, dass man auch eingeloggt ist. Nur wenn du tatsächlich eingeloggt bist sollte diese Anzeige kommen, allerdings auch wenn du als Gast angemeldet sein solltest (daher wird in den phpBB Dateien auch häufig auf $userdata['user_id'] == ANONYMOUS geprüft). Sofern der Pfad zum Forum stimmt sieht aber alles richtig aus, wenn nicht dürftest du aber ein paar Fehlermeldungen bekommen, da dann die includes nicht funktionieren würden.
Mach doch vor dem Echo (am besten vor der If Abfrage) mal ein
Code: Alles auswählen
include($phpbb_root_path . 'includes/page_header.'.$phpEx);
Dann kannst du sehen, was der page_header zu deinem LogIn Status sagt.
Verfasst: 30.10.2006 15:18
von Demonllama
OK, das ist mal interessant:
Und der Output des Arrays:
-1
Anonymous
cd745d995cb9316141acc401b92fd385
0
Der Pfad stimmt ziemlich sicher. Der Forenkopf wird angezeigt, aber ohne Stylesheets und ohne Grafiken.
Jetzt frag ich mich aber wieso die headers schon mal gesendet sein sollen?
Das übersteigt mein Verständnis von PHP ehrlich gesagt. Ich will lediglich einen authentifizierten User in meine Applikation übernehmen.
<edit>
Ich sehe gerade das die Links im übergebenen Forenkopf auch nicht passen und in die neue Seite hineinlaufen. Das ist natürlich Käse. Eine abolute Pfadangabe funktioniert aber auch nicht.
</edit>
Verfasst: 30.10.2006 16:23
von gn#36
Demonllama hat geschrieben:OK, das ist mal interessant:
Und der Output des Arrays:
-1
Anonymous
cd745d995cb9316141acc401b92fd385
0
Machst du irgend eine Ausgabe vor dem Aufruf? Nur so ist diese ausgabe nämlich zu interpretieren. An der -1 siehst du dass du als Gastuser eingetragen bist.
Der Pfad stimmt ziemlich sicher. Der Forenkopf wird angezeigt, aber ohne Stylesheets und ohne Grafiken.
Jetzt frag ich mich aber wieso die headers schon mal gesendet sein sollen?
Das übersteigt mein Verständnis von PHP ehrlich gesagt. Ich will lediglich einen authentifizierten User in meine Applikation übernehmen.
Nur keine Panik s.o. Die Grafiken werden nicht gefunden, da wir uns in einem Verzeichnis befinden, in dem die Relativen Pfadangaben nicht funktionieren.
<edit>
Ich sehe gerade das die Links im übergebenen Forenkopf auch nicht passen und in die neue Seite hineinlaufen. Das ist natürlich Käse. Eine abolute Pfadangabe funktioniert aber auch nicht.
</edit>
Das war zu erwarten, schließlich befindest du dich in einem anderen Ordner, da funktionieren Relative Pfade nicht. Du musst den Page_Header natürlich auch nicht zwingend ausgeben, das sollte nur als OPTISCHE Hilfe dienen. Außerdem funktioniert das mit den Cookies nur dann, wenn vorher noch keine Daten zum User gesendet wurden, also auch keine Blanks oder ähnliches. Vor dem <?php darf sich rein gar nichts befinden in der Datei, keine Zeilenumbrüche, keine Blanks, nichts.
Verfasst: 30.10.2006 16:34
von Demonllama
Also meine login_test.php ist exakt so wie ich sie im ersten Posting gepostet habe. Sie hat keinen HTML-Header oder dergleichen. In der ersten Zeile ist <?php und in der zweiten dann das "define".
Wenn ich die Datei dann mit "./" als Pfad im Ordner des Forums starte gibt er mir den korrekten User als angemeldet aus. Die headers-Fehler kommen aber trotzdem.
Verfasst: 30.10.2006 16:37
von gn#36
Verlink einfach mal die Datei als text
Wenn ich mir die Seite Ansehe wird da wohl Text vorher ausgegeben:
Benutzer ist nicht angemeldet!
Das darf nicht!
Verfasst: 30.10.2006 16:46
von Demonllama
Verfasst: 30.10.2006 17:01
von gn#36
Ja dann ist wohl klar warum die Meldungen kommen:
Das erste echo kommt vor dem Include des Page_headers. Ich meinte das eigentlich so:
Code: Alles auswählen
<?php
define('IN_PHPBB', true);
$phpbb_root_path = '../../forum/';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);
$userdata = session_pagestart($user_ip, PAGE_INDEX);
init_userprefs($userdata);
include($phpbb_root_path . 'includes/page_header.'.$phpEx);
if ($userdata['session_logged_in'])
{
echo("<br><br>Benutzer ist angemeldet!");
}
else
{
echo("<br><br>Benutzer ist nicht angemeldet!");
}
echo ("$userdata[user_id]<br>$userdata[username]<br>$userdata[session_id]<br>$userdata[session_logged_in]");
?>
Aber wie gesagt, das brauchst du eigentlich nicht. Die Userdaten sind auch ohne Page_header vorhanden, das sollte nur als Test dienen.
Damit der User zwingend auf dieser Seite im Forum angemeldet sein muss müsstest du folgenden Code einfügen:
Code: Alles auswählen
if($userdata['user_id']==ANONYMOUS || ! $userdata['session_logged_in'])
{
$pfad_zur_seite = "";//Hier den Pfad zur Seite eintragen
redirect(append_sid("login.$phpEx?redirect=$pfad_zur_seite",true));
}
Damit gelangt der User zu einem Loginschirm der ihn danach wieder zu dieser Seite weiterleiten sollte.
Verfasst: 31.10.2006 09:58
von Demonllama
Alles klar, vielen Dank für deine Hilfe. Ich hatte das Include ursprünglich auch vor der ersten Textausgabe. Die Anzeige war da auch schon korrekt. Ich habe das nach dem rumprobieren nur in der Position verändert.
Welche Info mir fehlte, war die Tatsache, das Trotz Cookie-Login für meine Seite eben kein Login gezählt wurde. Jetzt habe ich für meine Seite einen gültigen Login und auch Logout.
WUNDERBAR!
Das einzige Problem das ich jetzt noch habe ist die Tatache, das meine Seite eigentlich auf einer Subdomain liegt, aber nur mit der eigenen absoluten Pfadangabe funktioniert.
Das bekomme ich aber denke ich mal auch noch in den Griff.