Django / vBulletin单点登录 [英] Django / vBulletin single sign on

查看:352
本文介绍了Django / vBulletin单点登录的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

对于Django项目和同一个域上的vBulletin Board,单一登录(SSO)最简单的方法是什么?



我有一个现有的数据库的vBulletin用户。我已经看过Django的 RemoteUserBackend 和vBulletin的 vBSSO ,但我还没有找到完整的解决方案。

解决方案

我不知道Django,但是当你这样做时,搜索桥梁。
有一个人很高兴有人为你做了这件事。



这三个信息来源也可以帮助你完成自己的桥梁: p>

Drupal Bridge
http://drupalcode.org/project/drupalvb.git/blob/9b5ab7b93043edfc2fe09c083cc9108344e26577:/drupalvb.inc.php



CakePHP Bridge

https://github.com/ceeram/static_bakery/blob/master/src/articles/2010/01/Vbulletin-Bridge-For-CakePHP.rst



通用网桥

http://www.saurdo.com/11/11/utilizing-the-vbulletin-database-in-your - 主要网站



基本上,您需要查看cookies并从vBulletin DB中匹配会话哈希,以确保用户登录,然后您可以收集所有用户信息。



引用第三个链接进行Generig Bridge:

  / *检查会话是否存在,然后返回用户ID * / 
函数get_session($ hash){

dbconnect();

$ hash = mysql_real_escape_string($ hash);


$ ip = implode('。',array_slice(explode('。',$ _SERVER ['REMOTE_ADDR']),0,4 - 1));
$ newidhash = md5($ _ SERVER ['HTTP_USER_AGENT']。$ ip);

$ query =SELECT * FROM session WHERE sessionhash ='$ hash。'LIMIT 1;
$ result = mysql_query($ query);

if(mysql_num_rows($ result)> 0){
$ row = mysql_fetch_array($ result);

$ sessionhash = $ row ['sessionhash'];
$ idhash = $ row ['idhash'];
$ userid = $ row ['userid'];
$ lastactive = $ row ['lastactivity'];

return($ idhash == $ newidhash&&(time() - $ lastactive)< 900)? $ userid:false;
}
返回false;
}

检查数据库中的cookie值:

  function get_cookie($ id,$ pass){

dbconnect();

$ id = mysql_real_escape_string($ id);

$ query =SELECT * FROM user WHERE userid =。$ id。LIMIT 1;
$ result = mysql_query($ query);

if(mysql_num_rows($ result)> 0){
$ row = mysql_fetch_array($ result);
$ dbpass = $ row ['password'];

// vb可能会不时更改盐。可以在/includes/functions.php文件中找到
if(md5($ dbpass。'0d582e0835ec6697262764ae6cb467fb')== $ pass){
return $ id;
}
}
return false;
}

全部包装以确定用户是否被记录:

  function check_login(){
if(isset($ _ COOKIE ['bb_userid'])&& isset($ _ COOKIE [ bb_password'])){
if(get_cookie($ _ COOKIE ['bb_userid'],$ _COOKIE ['bb_password'])){
return $ _COOKIE ['bb_userid'];
}
}
if(isset($ _ COOKIE ['bb_sessionhash'])){
if(get_session($ _ COOKIE ['bb_sessionhash'])){
return get_session($ _ COOKIE ['bb_sessionhash']);
}
}
return false;
}

检索要显示的用户信息:

  function user_info($ id){
dbconnect();
$ result = mysql_query(SELECT * FROM user WHERE userid =.mysql_real_escape_string($ id)。LIMIT 1;);
返回mysql_fetch_array($ result);
}

最后,使用上述功能。像这样:

  if($ li = check_login()){
dbconnect();
$ uinfo = user_info($ li);

$ q_lastactivity =UPDATE user SET lastactivity ='.time()。'WHERE userid =。$ li。LIMIT 1;
mysql_query($ q_lastactivity);

if((time() - $ uinfo ['lastactivity'])> 900){
$ q_lastvisit =UPDATE user SET lastvisit ='$ uinfo ['lastactivity' ]'WHERE userid =。$ li。LIMIT 1;
mysql_query($ q_lastvisit); }
}

我希望这可能有助于您取得一些进展。


What is the easiest way to make a single sign on (SSO) for a Django project and a vBulletin board on the same domain?

I have an existing database of vBulletin users. I have looked into Django's RemoteUserBackend and vBulletin's vBSSO but I haven't found a complete solution.

解决方案

I doesn't know Django, but when you are up to something like this, search for "bridges". There is a high chance someone have already done that for you.

These three source of information can also help you get through doing your own bridge:

Drupal Bridge
http://drupalcode.org/project/drupalvb.git/blob/9b5ab7b93043edfc2fe09c083cc9108344e26577:/drupalvb.inc.php

CakePHP Bridge
https://github.com/ceeram/static_bakery/blob/master/src/articles/2010/01/Vbulletin-Bridge-For-CakePHP.rst

Generic Bridge
http://www.saurdo.com/11/11/utilizing-the-vbulletin-database-in-your-main-site

Basically you need to look into cookies and match the session hash from vBulletin DB to assure user is logged in, and then you can gather all the user information.

Quoting the third link doing a Generig Bridge:

/* Check if session exist then return user id*/
function get_session($hash){

    dbconnect();

    $hash = mysql_real_escape_string($hash);


    $ip = implode('.', array_slice(explode('.', $_SERVER['REMOTE_ADDR']), 0, 4 - 1));
    $newidhash = md5($_SERVER['HTTP_USER_AGENT'] . $ip);

    $query = "SELECT * FROM session WHERE sessionhash = '".$hash."' LIMIT 1";
    $result = mysql_query($query);   

    if(mysql_num_rows($result) > 0){
        $row = mysql_fetch_array($result);

        $sessionhash = $row['sessionhash'];
        $idhash = $row['idhash'];
        $userid = $row['userid'];
        $lastactive = $row['lastactivity'];

        return ($idhash == $newidhash && (time() - $lastactive) < 900) ? $userid : false;
    }
    return false;   
}

Check cookie values in database:

function get_cookie($id, $pass){

    dbconnect();

    $id = mysql_real_escape_string($id);

    $query = "SELECT * FROM user WHERE userid = ".$id." LIMIT 1";
    $result = mysql_query($query);  

    if(mysql_num_rows($result) > 0){
        $row = mysql_fetch_array($result);
        $dbpass = $row['password'];

        // vb might change the salt from time to time. can be found in the /includes/functions.php file
        if(md5($dbpass . '0d582e0835ec6697262764ae6cb467fb') == $pass){
            return $id;
        }
    }
    return false;   
}

Wrap it all up to determine if user is logged:

function check_login(){
    if(isset($_COOKIE['bb_userid']) && isset($_COOKIE['bb_password'])){
        if(get_cookie($_COOKIE['bb_userid'], $_COOKIE['bb_password'])){
            return $_COOKIE['bb_userid'];
        }
    }
    if(isset($_COOKIE['bb_sessionhash'])){
        if(get_session($_COOKIE['bb_sessionhash'])){
            return get_session($_COOKIE['bb_sessionhash']);
        }
    }
    return false;
}

Retrieve user info to be displayed:

function user_info($id){
    dbconnect();
    $result = mysql_query("SELECT * FROM user WHERE userid = ".mysql_real_escape_string($id)." LIMIT 1";);
    return mysql_fetch_array($result);
}

And to conclude, use the above functions somewhere. Like this:

if($li = check_login()){
    dbconnect();
    $uinfo = user_info($li);

    $q_lastactivity = "UPDATE user SET lastactivity = '".time()."' WHERE userid = ".$li." LIMIT 1";
    mysql_query($q_lastactivity);

    if((time() - $uinfo['lastactivity']) > 900){
        $q_lastvisit = "UPDATE user SET lastvisit = '".$uinfo['lastactivity']."' WHERE userid = ".$li." LIMIT 1";
        mysql_query($q_lastvisit);  }
}

I hope it might help you doing some progress.

这篇关于Django / vBulletin单点登录的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆