0%

转的 Discuz X2 密码加密方式&ThinkSAAS整合X2论坛用户 应该也可以整合别的网站

转的 Discuz X2 密码加密方式&ThinkSAAS整合X2论坛用户 应该也可以整合别的网站

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
<?php
/*
Discuz X2 密码加密方式&amp;ThinkSAAS整合X2论坛用户
分类:PHP, 电脑技术, 航大相关日期:2011-11-29作者:老曾阅读:240 views

今天整合开源ThinkSAAS社区,为了和OC通用账户,不必重复注册。OC论坛是X2.0版本。

我的思路是这样的:

不破坏原来登录注册机制,论坛用户也可以直接使用账号直接登录。ThinkSAAS轻博客登录名称是email地址。

1、登录时候检测是否是有效email地址,是则走原程序的登录步骤

2、否则认为是论坛用户,拿用户名和密码到论坛UCenter用户表中检验是否正确。

3、正确的话,检验此用户是否是第一次登录。第一次登录需要往ThinkSAAS中插入新用户,即把论坛用户信息保存一遍,转跳。

4、非一次登录,设置Cookie,和用户session信息,转跳,完成登录过程。

其中难点在于验证X2用户密码。

discuz以UCenter为核心,用户数据都存放在UCenter。开始走了弯路,论坛也有一张pre_common_member表,保存用户名和密码,不过这里的密码是随机数MD5加密值。真正密码在pre_ucenter_members中,密码使用两次MD5加密,而MD5的salt也存放在此表中salt字段。

使用:

$opwd=md5(md5(trim($_POST["pwd"])).$salt);、

记得计算出用户输入密码的加密值。

下面是网上找来的资料,可以参考下
*/


// random() 函数:来自DZ源代码
function random($length) {
$hash = "";
$chars="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz";
$max = strlen($chars) - 1;
PHP_VERSION < "4.2.0" &amp;&amp; mt_srand((double)microtime() * 1000000);
for($i = 0; $i < $length; $i++) {
$hash .= $chars[mt_rand(0, $max)];
}
return $hash;
}elseif(valid_email($email) == false){
// 假定密码为 mypassword000$password = "mypassword000";
// 生成随机字符串 $salt$salt = substr(uniqid(rand()), -6);
// UC 的二次MD5加密$password_uc = md5(md5($password).$salt);
// DZ数据表的“密码”字串$password_dz = md5(random(10));
//下面是整合登录的一些关键代码,只需修改appuseractionlogin文件
//qiMsg("Email书写不正确^_^");
//不是email,来自OC用户
$con = mysql_connect("localhost","root","你的密码");
if (!$con){
die("Could not connect: " . mysql_error());
}
mysql_select_db("ultrax", $con);//选择论坛数据库、
//论坛真正的密码放在pre_ucenter_members,而不是论坛的表
//密码经过两次MD5加密,密钥是salt
//先取得salt
//qiMsg($email);
$result=mysql_query("SELECT * FROM pre_ucenter_members WHERE username="".$email."" ",$con);
if ($myrow = mysql_fetch_array($result)){
$salt=$myrow["salt"];
//qiMsg("salt:"+$salt);
}
$opwd=md5(md5(trim($_POST["pwd"])).$salt);
$result=mysql_query("SELECT * FROM pre_ucenter_members WHERE username="".$email."" AND password="".$opwd.""",$con);
if ($myrow = mysql_fetch_array($result)){
//以下为身份验证成功后的相关操作
//论坛存在用户,检查之前是否插入,否则先在本地插入一遍
$oemail=$myrow["email"];
$opwd=$myrow["password"];
$username=$myrow["username"];
$areaid=2;
$fuserid=0;
//需要换数据库
mysql_select_db("qing", $con);
$oemailNum = $db->once_num_rows("select * from ".dbprefix."user where email="$oemail" ");
//论坛用户存在,但本地没有
if($oemailNum == "0"){
//在本地插入论坛用户
$db->query("INSERT INTO ".dbprefix."user (`pwd` , `email`) VALUES ("$opwd", "$oemail");");
$userid = $db->insert_id();
//积分
$db->query("insert into ".dbprefix."user_scores (`userid`,`scorename`,`score`,`addtime`) values ("".$userid."","注册","1000","".time()."")");
//用户信息
$arrData = array(
"userid"=> $userid,
"fuserid"=> $fuserid,
"username"=> $username,
"email"=> $oemail,
"sex"=> $sex,
"areaid" => $areaid,
"ip"=> getIp(),
"count_score"=> "1000",
"addtime"=> time(),
"uptime"=> time(),
);
//插入用户信息
$db->insertArr($arrData,dbprefix."user_info");
//默认加入小组
$isgroup = $db->once_fetch_assoc("select optionvalue from ".dbprefix."user_options where optionname="isgroup"");
if($isgroup["optionvalue"] != ""){
$arrGroup = explode(",",$isgroup["optionvalue"]);
foreach($arrGroup as $item){
$groupusernum = $db->once_num_rows("select * from ".dbprefix."group_users where `userid`="".$userid."" and `groupid`="".$item.""");
if($groupusernum == "0"){
$db->query("insert into ".dbprefix."group_users (`userid`,`groupid`,`addtime`) values("".$userid."","".$item."","".time()."")");
//统计更新
$count_user = $db->once_num_rows("select * from ".dbprefix."group_users where groupid="".$item.""");
$db->query("update ".dbprefix."group set `count_user`="".$count_user."" where groupid="".$item.""");
}
}
}
//用户信息
$userData = $db->once_fetch_assoc("select * from ".dbprefix."user_info where userid="$userid"");
//用户session信息
$sessionData = array(
"userid" => $userData["userid"],
"username" => $userData["username"],
"areaid" => $userData["areaid"],
"path" => $userData["path"],
"face" => $userData["face"],
"count_score" => $userData["count_score"],
"uptime" => $userData["uptime"],
); $_SESSION["tsuser"] = $sessionData;
//发送系统消息(恭喜注册成功)
$msg_userid = "0";
$msg_touserid = $userid;
$msg_content = "亲爱的 ".$username." :<br />您使用OC账号成功加入了 ".$TS_SITE["base"]["site_title"]."<br />在遵守本站的规定的同时,享受您的愉快之旅吧!";
aac("message")->sendmsg($msg_userid,$msg_touserid,$msg_content);
//插入完毕
}
//设置cookie,否则登录后还是无法进入主页
//获取userid
$userData = $db->once_fetch_assoc("select * from ".dbprefix."user_info where email="$oemail"");
if($userData["isenable"] == 1) qiMsg("sorry,你的帐号已被禁用!");
//记住登录Cookie
if($cktime != ""){
setcookie("ts_email", $email, time()+$cktime,"/");
setcookie("ts_pwd", $pwd, time()+$cktime,"/");
}
//用户session信息
$sessionData = array(
"userid" => $userData["userid"],
"username" => $userData["username"],
"areaid" => $userData["areaid"],
"path" => $userData["path"],
"face" => $userData["face"],
"count_score" => $userData["count_score"],
"uptime" => $userData["uptime"],
);
$_SESSION["tsuser"] = $sessionData;
//用户userid
$userid = $userData["userid"];
//积分记录
$db->query("insert into ".dbprefix."user_scores (`userid`,`scorename`,`score`,`addtime`) values ("".$userid."","登录","10","".time()."")");
$strScore = $db->once_fetch_assoc("select sum(score) score from ".dbprefix."user_scores where userid="".$userid.""");
//更新登录时间
$db->query("update ".dbprefix."user_info set `uptime`="".time()."" , `count_score`="".$strScore["score"]."" where userid="$userid"");
//跳转
if($jump != ""){
header("Location: ".$jump);
}else{
header("Location: ".SITE_URL);
}
}else{
qiMsg("登录失败!问问老曾吧=_=");
}
?>
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!