2016-04-06 24 views
0

Ich habe eine Website (www.the289register.com/index-andy.html) und ein phpBB3 Forum (www.the289register.com/phpBB3/) und ich habe es geschafft, die beiden mit einem Login-Formular zu integrieren die Titelseite. Wenn sich ein Benutzer auf der Startseite anmeldet, wird er mithilfe eines ausgeblendeten Felds im Formular zurückgeleitet. Das alles funktioniert gut.phpBB/Website Integration - Redirect funktioniert, aber nicht, wenn Benutzer das falsche Passwort eingibt

Wenn der Benutzer jedoch ein falsches Passwort erhält, einen falschen Benutzernamen eingibt oder eines der Felder leer lässt, funktioniert die Weiterleitung nicht.

Da die Seite Frames verwendet, bedeutet dies, dass die ucp.php-Seite des Forums in einer schmalen Leiste auf der linken Seite erscheint, in der sich menu.php befand. Dies ist offensichtlich für nicht technische Benutzer verwirrend. Ich muss einen Weg finden, um die Weiterleitung in allen Fällen funktionieren zu lassen, idealerweise ohne den Code von phpBB3 zu ändern, so dass meine Anpassung in Zukunft durch keine Upgrades von Forumssoftware stampfen wird.

Ich bin neu, also Entschuldigung für jede Neuigkeit. Hier ist, was ich in der Seitenleiste menu.php (gezupft ein paar Sachen zu halten, kurz) getan haben:

<?php include_once("phpbb-integrate.php"); ?> 

<?php 
$cp = request_var('cp', ''); 
if ($cp == "logout") { 
$user->session_kill(); 
$user->session_begin(); 
echo "Logged out"; 
} 
?> 

<html> 
<head> 
</head> 

<!-- ===== LOGIN BOX - DISPLAYS IF NOT SIGNED IN ====== --> 

<?php 
if ($user->data['user_id'] == ANONYMOUS) { 
?> 
<form method="POST" action="phpBB3/ucp.php?mode=login"> 
Forum Username:<br><input type="text" name="username" size="20"><br> 
Password:<br><input type="password" name="password" size="20"><br> 
Remember Me?: <input type="checkbox" name="autologin"><br> 
<input type="submit" value="Login" name="login"> 
<input type="hidden" name="redirect" value="../menu.php"> 
</form> 


<!-- ===== WELCOME THE USER IF SIGNED IN AND IS A CLUB MEMBER ====== --> 
<?php 
} elseif (in_array($user->data['group_id'], array(5,8,9))) { 
?> 
Welcome back, <?php echo $user->data['username_clean']; ?><br>You have <?php echo $user->data['user_unread_privmsg']; ?> new forum messages<br> 

<form method="POST" action="menu.php?cp=logout"> 
<input type="submit" value="Logout" name="logout"> 
<input type="hidden" name="redirect" value="../menu.php"> 
</form> 


<!-- ===== WELCOME THE USER IF NON-MEMBER ====== --> 
<?php 
} else { 
?> 
Hello <?php echo $user->data['username_clean']; ?>. You're not yet a T289R member 
<?php } ?> 


<!-- ===== PUBLIC MENU ITEMS GO BELOW ====== --> 
<?php 
if ($user->data['user_id'] == ANONYMOUS) { 
?> 
<!-- ===== PRESENT A 'JOIN' LINK IF NON-MEMBER OR NOT SIGNED IN ====== --> 
<li><a href="the289register/membershipnew.html" target="default">Join T289R!</a> 
<?php } ?> 

<!-- ===== PRESENT REMAINING PUBLIC LINKS ====== --> 
<a href="http://wiki.the289register.com" target="_blank">289 Register Wiki</a> 
<a href="phpBB3/index.php" target="_blank">Forum</a> 


<?php 
// MEMBER MENU LIST 
if (in_array($user->data['group_id'], array(5,8,9))) { 
?> 

<!-- ===== MEMBERS MENU ITEMS GO BELOW ====== --> 
<h3>Members Menu</h3> 
<!-- <div id="side-bar"> --> 
<a href="http://www.the289register.com/" target="_blank">Test link for member</a> 

<?php } ?> 

</body> 
</html> 

Und hier ist der Inhalt von phpbb-integrate.php:

<?php 
define('IN_PHPBB', true); 
$phpbb_root_path = './phpBB3/'; 
$phpEx = substr(strrchr(__FILE__, '.'), 1); 
include($phpbb_root_path . 'common.' . $phpEx); 
// Start session management 
$user->session_begin(); 
$auth->acl($user->data); 
$user->setup(); 
?> 

Wie ich sagen wir, Umleitung funktioniert gut, wenn der Benutzername und das Passwort korrekt eingegeben werden. Wenn der Benutzer etwas durcheinander bringt, wird die Anmeldeseite des Forums in der Seitenleiste angezeigt.

Alle gut erklärten Ratschläge geschätzt - ich bin nicht viel gut mit PHP noch.

+0

Der beste Weg könnte die Bearbeitung der Datei * includes/functions.php * sein, da das Feld ["redirect"] (https://wiki.phpbb.com/Practical.External_login) nur funktioniert, wenn die Anmeldung erfolgreich ist. Überprüfen Sie die Mod [** Prime Login Return **] (https://www.phpbb.com/customise/db/mod/prime_login_return), es ist eine kleine Änderung im Code. Vergessen Sie es nicht, wenn Sie den Kern der phpbb aktualisieren wollen. – JSLirola

+0

Danke für den Vorschlag. Irgendwelche Hinweise, was in functions.php geändert werden soll? Leider ist Prime Login Return nur für phpBB3 3.0. Wir benutzen 3.1.6 und der Entwickler dieser Erweiterung hat dies noch nicht geändert. –

+0

bei functions.php Sehen, ich denke, das Bit die Umleitung funktioniert, wenn es erfolgreich Auth ist: 'if ($ result [ 'status'] == LOGIN_SUCCESS) \t \t { \t \t \t $ redirect = request_var ('Umleitung' , "{$ phpbb_root_path} index. $ phpEx"); ' –

Antwort

0

Sie verwenden die PHP-Datei ucp.php für die Anmeldung (<form method="POST" action="phpBB3/ucp.php?mode=login">), aber für das, was Sie tun möchten, würde ich vorschlagen, Ihre eigene Datei für die Anmeldung zu verwenden. Auf diese Weise können Sie genau auswählen, was passiert, wenn die Anmeldung fehlschlägt.

Der relevante Teil der ucp.php Datei in für die Anmeldung ist dies:

case 'login': 
    if ($user->data['is_registered']) 
    { 
     redirect(append_sid("{$phpbb_root_path}index.$phpEx")); 
    } 

    login_box(request_var('redirect', "index.$phpEx")); 
break; 

Und der relevante Teil dieses Codes ist die login_box() Funktion aus der functions.php-Datei.

Also sagen wir, Ihre Sidebar-Menü-Datei ist menu.php. Ich würde phpBBs gesamte login_box() Funktion von functions.php kopieren und sie in menu.php einfügen und es in etwas wie my_login_box umbenennen. In der menu.php ändern Sie dann Ihre Formularaktion so, dass sie auf menu.php zeigt. Fügen Sie als Nächstes Code hinzu, um zu überprüfen, ob Sie über eingehende Login-Daten wie einen Benutzernamen oder ein Passwort verfügen (z. B. $POST['username']), und führen Sie dann my_login_box() aus. Schließlich müssen Sie den Inhalt von my_login_box ändern, um das zu tun, was Sie tun möchten, wenn eine Anmeldung fehlschlägt oder fehlschlägt.

In diesem Fall sollten Sie sich keine Gedanken über Weiterleitungen machen. Wenn die Anmeldung erfolgreich ist, drucken Sie eine Begrüßungsnachricht oder etwas aus und drucken Sie das Anmeldeformular nicht aus. Wenn dies fehlschlägt, drucken Sie die Fehlermeldung aus und fahren Sie fort, das Formular anzuzeigen.