PDA

View Full Version : Hook for external authentication?


warhau
04-23-2009, 05:26 AM
Hi. I'm writing a plugin to use our external user database via SOAP. It creates the user in vb if the user does not already exist. If it does exist, it updates the vb password for the user to match whatever got authenticated through SOAP.

Everything works perfectly, except when a new user is created in vbb, they then get the failed log message. Simply refreshing the page logs them in.

It's currently hooked at global_complete. Is there an existing hook which would solve the failed login message on new account creation, or does it sound like I missing something in the code? Any example of this type of thing out there?

Version is 3.82.

Thanks in advance.

Dismounted
04-23-2009, 05:32 AM
How are you authenticating vBulletin? Are you setting cookies?

warhau
04-23-2009, 01:48 PM
Cookieuser is set as soon as they pass external auth. The account gets created fine. The only problem is that VB gives an incorrect login message following new account creation. Refreshing the error page logs the new user in without a problem.

Here's my code from that point until the end of the plugin:

// User passed external authentication so set cookie
$vbulletin->GPC['cookieuser'] = $vbulletin->GPC['vb_login_username'];

// Check to see if externally authed user exists in VB
$userid = $vbulletin->db->query_first_slave("
SELECT userid
FROM ".TABLE_PREFIX."user
WHERE LOWER(email) = LOWER('".mysql_real_escape_string($vbulletin->GPC['vb_login_username'])."')");

// If they exist in VB, get the userid
if ($userid) {
$newuser->set_existing(fetch_userinfo($userid['userid'], 0));
$newuser->set('password', $passwd);
}
// If not set up the externally authed user in VB
else {
$newuser->set('email', strtolower($vbulletin->GPC['vb_login_username']));
$newuser->set('username', $myuser);
$newuser->set('usergroupid', 9);
$newuser->set_bitfield('options', 'adminemail', true);
$newuser->set_bitfield('options', 'emailonpm', true);
$newuser->set_bitfield('options', 'vm_enable', true);
$newuser->set('pmpopup', 1);
$newuser->set('password', $passwd);
$newuser->set('ipaddress',$ip);
}
// Return errors if there are any
if ($newuser->errors) {
process_logout();
eval(standard_error("Error creating/updating user<br/>" . $newuser->errors[0]));
}
// If not, save user
else {
$newuserid = $newuser->save();
}