When designing your website and integrating vBulletin with the rest of your site, it's often desirable to have a centralized login form for users to initiate a vBulletin session.

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';
Start up vBulletin.
Code:
define('CSRF_PROTECTION', false);
require_once($vbpath . '/includes/vb5/autoloader.php');
vB5_Autoloader::register($vbpath);
vB5_Frontend_Application::init('config.php');
Step two: Send the API request

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));
Step three: Set the cookies

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);
At this point the login is complete and you would redirect the user back to the page they were on or to your home page, etc.

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';
    }
}