- 时间:2022-10-02 05:51 编辑: 来源: 阅读:
- 扫一扫,手机访问
摘要:Discuz! Passport 通行证整合
解决办法:
第一步: 到dz的数据库表cdb_settings 找到下面这几行修改为
[img]http://files.jb51.net/upload/20080327224909423.gif[/img]
第二步: 删除dz安装目录/forumdata/cache/cache_settings.php
第三步: 重新访问论坛
登陆和注册整合流程
用户从登陆或注册表单提交帐号密码信息 ==>
主站程序检验用户登陆或注册,成功(注册需要生成新用户)则 ==>
设置主站自身的cookie或session ==>
url传递 返回地址forward和编码后的用户信息和其他信息 到dz/api/passport.php
整合之前请先仔细阅读官方passport技术文档: abc@hotmail.com
member_info="time=" & datediff("s","1970-1-1 00:00:00",now) &_
"&username=" & request.Form("username") &_
"&password=" & md5(request.Form("password"),32) &_
"&email=" & "abc@hotmail.com"
auth = passport_encrypt(member_info , PassportKey)
response.Cookies("auth")=auth
forward=request.form("forward")
if forward="" then forward=YourAspWeb_Url
verify = md5("login" & auth & forward & PassportKey,32)
auth=server.URLEncode(auth)
forward=server.URLEncode(forward)
response.Redirect(DiscuzBbs_Url & "api/passport.php?action=login&auth=" & auth & "&forward=" & forward & "&verify=" & verify)
'========================================================
'===============passport 整合结束========================
'========================================================
else
response.Write("登陆失败<br>")
end if
end function
%>
<form name="form1" method="post" action="login.asp?act=login">
用户名:
<input type="text" name="username">
<br>
密 码:
<input type="password" name="password">
<br>
<input type="hidden" name="forward" value="<%=request.QueryString("forward")%>">
<input type="submit" name="Submit" value=" 登 陆 ">
</form>
[img]http://files.jb51.net/upload/20080327224909210.gif[/img]
abc@abc.com%22;//需要email的值,实际整合通常情况是从数据库里获取用户email
dzAuth = passport_encrypt(memberInfo , dzPassportKey);
dzForward = forward.Value.ToString().Trim();//获取返回地址
if(dzForward=="") dzForward = webUrl;//如果返回地址为空,则返回设置的页
dzVerify = md5("login" + dzAuth + dzForward + dzPassportKey);
dzAuth = Server.UrlEncode(dzAuth);
dzForward = Server.UrlEncode(dzForward);
Response.Redirect(dzUrl + "api/passport.php?action=login&auth=" + dzAuth + "&forward=" + dzForward + "&verify=" + dzVerify);
//---------------------------passport注册或登陆整合结束-----------------------------
}else Response.Write("登陆失败<br>");
}
//------------------------------------以下为一些关键函数------------------------------
// 将字符串转换为byte数组
public byte[] strToByteAry(string str){
return Encoding.Default.GetBytes(str);
}
// c# dz通信证编码函数
public string passport_encrypt(string txt, string key){
byte[] randomNumber = new byte[1];
RNGCryptoServiceProvider Gen = new RNGCryptoServiceProvider();
Gen.GetBytes(randomNumber);
int rand = Convert.ToInt32(randomNumber[0]);
string encrypt_key = md5(rand.ToString());
byte[] txtAry = strToByteAry(txt);
byte[] encryAry = strToByteAry(encrypt_key);
int j = 0;
int ctr = 0;
byte[] tmp = new byte[2 * txtAry.Length];
for (int i = 0; i < txtAry.Length; i++)
{
ctr = ctr == encryAry.Length ? 0 : ctr;
tmp[j++] = encryAry[ctr];
tmp[j++] = xor(txtAry[i], encryAry[ctr++]);
}
return Convert.ToBase64String(passport_key(tmp, key));
}
// c# dz通行证解码函数
public string passport_decrypt(string txt, string key){
byte[] t = Convert.FromBase64String(txt);
byte[] btxt = passport_key(t, key);
byte[] btmp = new byte[btxt.Length];
int j = 0;
for (int i = 0; i < btxt.Length; i++, j++)
btmp[j] = xor(btxt[i], btxt[++i]);
return Encoding.Default.GetString(btmp);
}
// c# dz通行证密匙处理函数
public byte[] passport_key(byte[] btxt, string key){
key = md5(key);
byte[] keyAry = strToByteAry(key);
int ctr = 0;
byte[] tmp = new byte[btxt.Length];
for (int i = 0; i < btxt.Length; i++){
ctr = (ctr == keyAry.Length) ? 0 : ctr;
tmp[i] = xor(btxt[i], keyAry[ctr++]);
}
return tmp;
}
// 针对byte的异或
public byte xor(byte a, byte b){
return Convert.ToByte(a ^ b);
}
// 获取UNIX时间戳
public string time(){
DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
DateTime dtNow = DateTime.Parse(DateTime.Now.ToString());
TimeSpan toNow = dtNow.Subtract(dtStart);
string timeStamp = toNow.Ticks.ToString();
timeStamp = timeStamp.Substring(0, timeStamp.Length - 7);
return timeStamp;
}
// md5加密
public string md5(string str){
MD5 md5Hasher = MD5.Create();
string re="";
byte[] data = md5Hasher.ComputeHash(Encoding.Default.GetBytes(str));
for (int i = 0; i < data.Length; i++)
re += data[i].ToString("x2");
return re;
}
}
[img]http://files.jb51.net/upload/20080327224909210.gif[/img]
[url=http://www.tenwe.com/tech/uploadfile/200702/20070227024435342.rar]/tech/uploadfile/200702/20://www.tenwe.com/tech/uploadfile/200702/20070227024435342.rar" target=_blank>/tech/uploadfile/200702/20070227024435342.rar[/url]
070227024435342.rar