MyBB.de Forum

Normale Version: Automatische Anmeldung über Plugin
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo,

ich möchte aus einer Plugin-Methode am Hook "index_start" die Anmeldung überspringen, in dem ich die nötigen Einstellungen manuell aus einer anderen Session setze.
In meinen jugendlichen Leichtsinn dachte ich mir, dass

Code:
session_start();
global $mybb;
$mybb->user['uid'] = $_SESSION['id'];

ausreicht. Das interessiert das MyBB aber nicht. Kann mir jemand einen Tipp geben?

Danke!
So, habe es hinbekommen. Wen es interessiert, das hier steht in der Pluginfunktion:

Code:
    session_start();
    require_once MYBB_ROOT."inc/functions_post.php";
    require_once MYBB_ROOT."inc/functions_user.php";
    require_once MYBB_ROOT."inc/class_parser.php";
    global $user, $newsession, $db, $session, $remember;
    $user = validate_password_from_username($_SESSION['nickname'], $_SESSION['pw']);
    $newsession = array(
            "uid" => $user['uid'],
        );
    $db->update_query("sessions", $newsession, "sid='".$session->sid."'");
    my_setcookie("mybbuser", $user['uid']."_".$user['loginkey'], $remember, true);
    my_setcookie("sid", $session->sid, -1, true);

Das ganze befindet sich dann im Hook global_start.

Vielleicht steht ja auch zu viel drin, aber es funktioniert. Wink
Hm ... kann meinen Beitrag nicht mehr editieren. Ich wollte noch hinzufügen:

Code:
    session_start();
    if (isset($_SESSION['bsg_redirect']))
    {
        require_once MYBB_ROOT."inc/functions_post.php";
        require_once MYBB_ROOT."inc/functions_user.php";
        require_once MYBB_ROOT."inc/class_parser.php";
        global $user, $newsession, $db, $session, $remember;
        $user = validate_password_from_username($_SESSION['nickname'], $_SESSION['pw']);
        $newsession = array(
                "uid" => $user['uid'],
            );
        $db->update_query("sessions", $newsession, "sid='".$session->sid."'");
        my_setcookie("mybbuser", $user['uid']."_".$user['loginkey'], $remember, true);
        my_setcookie("sid", $session->sid, -1, true);
        unset($_SESSION['bsg_redirect']);
    }

Änderung: Die Anmeldung wird so nur einmal ausgeführt. Vorher würde sie bei jedem Seitenaufruf erneut ausgeführt. Das ist zwar nicht schädlich, verbraucht aber unnötig Rechenzeit (Datenbankzugriffe).
Die Sessionvariable bsg_redirect speichert den Status, dass zum Forum redirected wurde.
Noch eine Erweiterung:

Bisher hatte das Plugin den Makel, dass man immer einmal die Seite aktualisieren musste, bevor die automatische Anmeldung griff (also die gesetzten Cookies zum Server übertragen wurden).
Also habe ich die Aktualisierung auch automatisiert und das Plugin entsprechend erweitert:

Code:
...
$plugins->add_hook("pre_output_page", "remove_bsg_redirect");
...

und dazu passend natürlich die Methode:
Code:
...
function remove_bsg_redirect($page)
{
    if (isset($_SESSION['bsg_redirect']))
    {
        unset($_SESSION['bsg_redirect']);
        $js = ' onload="self.location.reload()"';
        $page = str_replace("<body", "<body" . $js, $page);
    }
    return $page;
}
...

Die Sessionvariable bsg_redirect ist dementsprechend vor dem Redirect aufs Forum zu setzen.
Ist zwar nicht schön, dafür aber unkonventionell und einfach. Big Grin