Here are some instructions for how you can log in and start a vBulletin session by submitting a form from another page. This is for informational purposes only and is intended to be a quick-start guide to point you in the right direction. Don't just copy and paste this. Instead, use it to understand how the vBulletin login process works, and how you can create a script that will log into vBulletin.
Step one: Initialize the vBulletin system
Set a variable with the path to your vBulletin installation.
Code:
$vbpath = 'path/to/vbulletin';
Code:
define('CSRF_PROTECTION', false); require_once($vbpath . '/includes/vb5/autoloader.php'); vB5_Autoloader::register($vbpath); vB5_Frontend_Application::init('config.php');
Now that vBulletin is initialized, we can send an API request to perform the login.
Code:
$username = 'Me'; $password = 'hunter2'; $api = Api_InterfaceAbstract::instance(); $loginInfo = $api->callApi('user', 'login', array($username, $password));
The return value of the API call ($loginInfo, in this example) will contain information about the session and if the login was successful. If $loginInfo['errors'] is empty, the login was successful. If we have a successful login, we now need to set the correct cookies to keep the user logged in.
Code:
$rememberThisUser = true; vB5_Auth::setLoginCookies($loginInfo, '', $rememberThisUser);
Bringing it together
Below is a sample that contains all the above code. I'll repeat my warning from above. You should avoid copying and pasting this code. Instead, use it to understand how the vBulletin login process works and how you can create your own login form.
Note: This code should work with at least vBulletin 5.1.8. It will probably work with some previous and later versions, but may need to change in the future. I hope this helps if you need to create a login script like this!
Code:
<?php // Path to your vBulletin installation $vbpath = 'path/to/vbulletin'; // Start login script define('CSRF_PROTECTION', false); require_once($vbpath . '/includes/vb5/autoloader.php'); vB5_Autoloader::register($vbpath); vB5_Frontend_Application::init('config.php'); if ($_SERVER['REQUEST_METHOD'] == 'POST') { /////////////////////////////////////////////////////////////////////////////////////// // process the login form $api = Api_InterfaceAbstract::instance(); $loginInfo = $api->callApi('user', 'login', array($_POST['username'], $_POST['password'])); if (empty($loginInfo['errors'])) { // set cookies vB5_Auth::setLoginCookies($loginInfo, '', !empty($_POST['remember'])); // redirect somewhere Also see: vB5_Auth::doLoginRedirect(); header('Location: vb5_external_login.php'); exit; } else { // there was a problem logging in. // redirect or display errors here } } else { /////////////////////////////////////////////////////////////////////////////////////// // display a login form $userid = vB5_Cookie::get('userid', vB5_Cookie::TYPE_UINT); $hash = vB5_Cookie::get('password', vB5_Cookie::TYPE_STRING); if (empty($userid) OR empty($hash)) { ?> <form action="vb5_external_login.php" method="post"> <input type="text" name="username" value="" placeholder="User Name" /> <input type="password" name="password" value="" placeholder="Password" /> <label><input type="checkbox" name="remember" /> Stay logged in?</label> <input type="submit" value="Log In" /> </form> <?php } else { echo 'Already logged in'; } }
vB5_Frontend_Application::init('config.php');
... needs to be changed to ...
vB5_Frontend_Application::init('../vb');