PDA

View Full Version : Logging In/Authenticating By Userid


MatthewWegner
08-24-2009, 10:03 PM
Hey Guys,

I've spent a few hours searching/experimenting with different things, but I haven't quite found what I'm looking for. Here's what I'm doing, or trying to do:

I'm bridging our user database to vBulletin. I have all of that working--I can easily create/delete/update vBulletin accounts when our user accounts are updated. Due to differences in password schemes I would prefer to log in by userid instead of setting the bbuserid/bbpassword cookies.

What is the simplest way to accomplish this?

I have tried to hook into init_startup and global_start with something like:


// verify credentials to our cookies/system, get vbulletin userid

require_once(DIR . '/includes/functions_login.php');

$vbulletin->userinfo['userid'] = 2; // or some id

process_new_login('', true, '');


In global_start this almost works--I log in, but I get a "you do not have permission to access this page" message. When I comment out the hook the login appears to stick, so the cookies set by process_new_login() are indeed valid, but not for the rest of this page's execution.

Is there any way to call process_new_login() and populate userinfo in-line, without requiring a redirect/refresh?

Or is there a different approach I should be taking here? I feel like I'm chasing my tail with no real leads. It seems like such a simple thing, too. Thanks for any help!

--------------- Added 1251173103 at 1251173103 ---------------

I guess the simpler question is:

I have a vBulletin userid. How do I inject a session/login before any vB code checks for it?

Marco van Herwaarden
08-25-2009, 07:17 AM
The easiest way is really to just set the cookie.

MatthewWegner
08-25-2009, 09:01 PM
Thanks for the tip! I got this working now. Our solution looks like:


// if we're logged in, override cookies so vB will log us in properly
if(App::$playerIsRegistered)
{
$vbUser = App::$player->getVBulletin();
$_COOKIE['bbuserid'] = VBHelpers::GetUserID($vbUser);
$_COOKIE['bbpassword'] = VBHelpers::GetCookiePassword($vbUser);
}
else
{
$_COOKIE['bbsessionhash'] = '';
$_COOKIE['bbuserid'] = '';
$_COOKIE['bbpassword']= '';
}


I'm not actually setting real browser cookies, just overriding PHP's internal arrays (this is hooked into init_startup, so it's before vB ever reads them). I still need to work out a solution for actions that require double logins--deleting a bunch of threads at once as a moderator, for instance--but this is a great start.

(Note to anyone finding this thread via a search later--the App/VBHelpers classes are from our own framework, and are not a part of vBulletin).