gpt4 book ai didi

Django/vBulletin 单点登录

转载 作者:行者123 更新时间:2023-12-01 05:19:43 26 4
gpt4 key购买 nike

为同一域中的 Django 项目和 vBulletin 板进行单点登录 (SSO) 的最简单方法是什么?

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

最佳答案

我不了解 Django,但是当你遇到这样的事情时,搜索“bridges”。很有可能已经有人为您完成了。

这三个信息来源也可以帮助您通过做自己的桥梁:

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

CakePHP 桥
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-main-site

基本上您需要查看 cookie 并匹配来自 vBulletin DB 的 session 哈希以确保用户已登录,然后您可以收集所有用户信息。

引用第三个链接做 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;
}

检查数据库中的 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 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;
}

将其全部打包以确定用户是否已登录:

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";);
return 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); }
}

我希望它能帮助你取得一些进步。

关于Django/vBulletin 单点登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12370005/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com