Beiträge: 13
Themen: 2
Registriert seit: 30.11.2011
28.12.2011, 10:57
(Dieser Beitrag wurde zuletzt bearbeitet: 28.12.2011, 11:28 von atarifreak.)
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!
Beiträge: 13
Themen: 2
Registriert seit: 30.11.2011
28.12.2011, 12:34
(Dieser Beitrag wurde zuletzt bearbeitet: 28.12.2011, 12:35 von atarifreak.)
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.
Beiträge: 13
Themen: 2
Registriert seit: 30.11.2011
28.12.2011, 14:03
(Dieser Beitrag wurde zuletzt bearbeitet: 28.12.2011, 14:04 von atarifreak.)
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.
Beiträge: 13
Themen: 2
Registriert seit: 30.11.2011
29.12.2011, 18:10
(Dieser Beitrag wurde zuletzt bearbeitet: 29.12.2011, 18:12 von atarifreak.)
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.