Hi,
I want to log a user into our wiki if they are logged into our website.
I assume that I need to use the UserLoadFromSession hook, but at this
point in the code, the MW session is already active. Does it make sense
to close the MW session, configure & start my website session in order
to access the user ID, and then re-open the MW session using
wfSetupSession(), or is this not recommended?
I see that some people access their website username from another
cookie, but I'd like to avoid this if possible.
This is the rough idea that seems to be working, I think:
$wgHooks['UserLoadFromSession'][] = function($user, &$result) {
// Check if the user is already logged into MW.
// How do I do this???
// Close MW session.
session_write_close();
// Configure website session.
session_name('x');
session_save_path('x');
ini_set('session.cookie_domain', '.x');
session_start();
// Check if user is logged in to website.
if (isset($_SESSION['Zend_Auth'])) {
$userId = (int)$_SESSION['Zend_Auth']['storage'];
// Close website session.
session_write_close();
// temp, look up username in DB.
if ($userId == 123) {
$username = 'xyz';
}
$user = User::newFromName($username);
// Log user in.
$user->setToken();
$user->saveSettings();
wfSetupSession();
$user->setCookies();
} else {
wfSetupSession();
}
return true;
};
I'm not sure if this is the best option, and also how to bypass this
code if the user is already logged into the wiki.
I also need to auto-create an account for users without MW accounts, but
I think I can use $user->addToDatabase() for that.
Any help would be greatly appreciated.
Glen.