View Single Post
  #4  
Old 11-17-2009, 07:13 PM
WeBBy WeBBy is offline
 
Join Date: Jun 2003
Posts: 43
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

If you want to know how....

I use a access_user_class on several sites because it is readily customizable and offers a high degree of security (http://www.finalwebsites.com/snippets.php?id=10).

1. As part of the registration for the general user-class login, I added an automatic vbb account as follows:

Code:
 //Create Randon Salt 4 password
	function gen_salt($length = '3')
    {
    $salt = "";
    $possible = "abcdefghjklmnpqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()_-+=[]{}\/.,?<>~";
    $i = 0;
    while($i < $length)
        {
        $char = substr($possible, mt_rand(0, strlen($possible) - 1), 1);
        $salt .= $char;
        $i++;
        }

    return $salt;
    }  
//generate encrypted password
	$mysalt = gen_salt();
	$vbbpasswd = md5(md5($_POST[password]).$mysalt);
//Add to vbb user table
$db = mysql_connect("localhost", "username", "userpass") or die ("Cannot connect to MySQL");
mysql_select_db("dbname",$db) or die ('Cannot Connect to Forum Database');
$query = "insert into user (usergroupid, username, password, email, usertitle, ipaddress, salt) values ('2', '$_POST[username]',  '$vbbpasswd',  '$_POST[email]',  'Title',  '$ip', '$mysalt')";
$result = mysql_query($query,$db) or die ("Cannot update Discussion Forum Database");
VBB User Account Created

2. Stripped out the login from vbb login.php and saved it as vbblogin.php:

Code:
<?
// ############################### start vbb login ###############################

$curdir = getcwd ();
chdir('/path/to/forum');
$_POST[vb_login_username] = $_GET[user];
$_POST[vb_login_password] = $_GET[mempass];
$_POST[cookieuser] = "1";

require_once('/path/to/forum/global.php');
require_once('/path/to/forum/includes/functions_login.php');
	$vbulletin->input->clean_array_gpc('p', array(
		'vb_login_username'        => TYPE_STR,
		'vb_login_password'        => TYPE_STR,
		'vb_login_md5password'     => TYPE_STR,
		'vb_login_md5password_utf' => TYPE_STR,
		'postvars'                 => TYPE_BINARY,
		'cookieuser'               => TYPE_BOOL,
		'logintype'                => TYPE_STR,
		'cssprefs'                 => TYPE_STR,
	));
	// can the user login?
	$strikes = verify_strike_status($vbulletin->GPC['vb_login_username']);
	// make sure our user info stays as whoever we were (for example, we might be logged in via cookies already)
	$original_userinfo = $vbulletin->userinfo;
	if (!verify_authentication($vbulletin->GPC['vb_login_username'], $vbulletin->GPC['vb_login_password'], $vbulletin->GPC['vb_login_md5password'], $vbulletin->GPC['vb_login_md5password_utf'], $vbulletin->GPC['cookieuser'], true))
	{
		($hook = vBulletinHook::fetch_hook('login_failure')) ? eval($hook) : false;
		// check password
		exec_strike_user($vbulletin->userinfo['username']);
		$vbulletin->userinfo = $original_userinfo;
			}
	exec_unstrike_user($vbulletin->GPC['vb_login_username']);
	// create new session
	process_new_login($vbulletin->GPC['logintype'], $vbulletin->GPC['cookieuser'], $vbulletin->GPC['cssprefs']);
	// do redirect
	exec_header_redirect($vbulletin->options['forumhome'] . '.php');
?>
Notice the:
Code:
$_POST[vb_login_username] = $_GET[user];
$_POST[vb_login_password] = $_GET[mempass];
$_POST[cookieuser] = "1";
at the top of the page. Will explain that later.

3. Now to login, I located the login and cookie functions of the access_user_class.php that performn the login/cookie which happens to be the function set_user().

I tried an include, but the scripting in vbblogin.php and access_user_class.php were in conflict and to take the cheap and easy way out (easier than fixing the conflicts), I used a Location to drive the vbb login:

Code:
//define username-password of access_user_class
		$user = $this->user;
		$mempass = $this->user_pw;
//Send it to vbblogin as a GET
		header("Location: http://www.mysite.com/forum/mystuff/vbblogin.php?user=$user&mempass=$mempass");
Probably not the best way to do it, but it works and accomplishes what I wanted. Because I am now using a GET and vbb is using a POST, I redefined the POST values to the GET values. The $user and $mempass are from the user_class but could be replaced with the original post[] command in the login form

I also changed the login form in the narbar template to the user_class login, added the user_class to the top of headinclude, changed logout to the user_class (rather than vbb), added a few plug-ins to deal with a few issues.

As I said, probably not the best way, but it works and probably can be applicable to a host of different external registration/login schemes.

Hope it helps someone
Reply With Quote
 
X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.01527 seconds
  • Memory Usage 1,791KB
  • Queries Executed 11 (?)
More Information
Template Usage:
  • (1)SHOWTHREAD_SHOWPOST
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (4)bbcode_code
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)post_thanks_box
  • (1)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (1)post_thanks_postbit_info
  • (1)postbit
  • (1)postbit_onlinestatus
  • (1)postbit_wrapper
  • (1)spacer_close
  • (1)spacer_open 

Phrase Groups Available:
  • global
  • postbit
  • reputationlevel
  • showthread
Included Files:
  • ./showpost.php
  • ./global.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/class_hook.php
  • ./includes/modsystem_functions.php
  • ./includes/functions_bigthree.php
  • ./includes/class_postbit.php
  • ./includes/class_bbcode.php
  • ./includes/functions_reputation.php
  • ./includes/functions_post_thanks.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_postinfo_query
  • fetch_postinfo
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • showpost_start
  • bbcode_fetch_tags
  • bbcode_create
  • postbit_factory
  • showpost_post
  • postbit_display_start
  • post_thanks_function_post_thanks_off_start
  • post_thanks_function_post_thanks_off_end
  • post_thanks_function_fetch_thanks_start
  • post_thanks_function_fetch_thanks_end
  • post_thanks_function_thanked_already_start
  • post_thanks_function_thanked_already_end
  • fetch_musername
  • postbit_imicons
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • postbit_display_complete
  • post_thanks_function_can_thank_this_post_start
  • showpost_complete