Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

Passport 通行证 整合

[复制链接]
 楼主| huozhe3136 发表于 2006-5-31 15:27:45 | 显示全部楼层
你给我个网址吧,我先看看是做什么的,
我的机器装不了, mysql版本不对
回复

使用道具 举报

 楼主| huozhe3136 发表于 2006-5-31 16:29:10 | 显示全部楼层
你自己调试一下 我调试不了

  1. <?php
  2. /******************************
  3. * EQdkp
  4. * Copyright 2002-2003
  5. * Licensed under the GNU GPL.  See COPYING for full terms.
  6. * ------------------
  7. * login.php
  8. * Began: Sat December 21 2002
  9. *
  10. * $Id: login.php,v 1.11 2003/07/09 16:15:01 tsigo Exp $
  11. *
  12. ******************************/

  13. define('EQDKP_INC', true);
  14. $eqdkp_root_path = './';
  15. include_once($eqdkp_root_path . 'common.php');

  16. // Make our _GET and _POST vars into normal variables
  17. // so we can process a login request through get or post
  18. extract($_GET);
  19. extract($_POST);

  20. if ( (isset($login)) || (isset($logout)) )
  21. {
  22.     if ( isset($login) && ($user->data['user_id'] <= 0) )
  23.     {
  24.         $redirect = ( isset($redirect) ) ? $redirect : 'index.php';
  25.         
  26.         $auto_login = ( !empty($auto_login) ) ? true : false;
  27.       
  28.         if ( !$user->login($username, $password, $auto_login) )
  29.         {
  30.             $tpl->assign_var('META', '<meta http-equiv="refresh" content="3;url=login.php' . $SID . '&redirect=' . $redirect . '">');
  31.             
  32.             message_die($user->lang['invalid_login'], $user->lang['error']);
  33.         }
  34.                 else
  35.                 {
  36.                         //===========passport login 整合开始=====================
  37.                         //==============================================
  38.                         //==============没有调试过 不过应该可以同步你的玩家数据到论坛==
  39.                         //==============================================
  40.                         $YourWeb_Url="http://www.abc.com/index.php" //这里自己修改成网站首页的地址
  41.                 $DiscuzBbs_Url="http://www.abc.com/bbs/"   //这里换成论坛地址
  42.                 $passportkey="1234567890";        //论坛里设置的passportkey
  43.                        
  44.                         $sql = 'SELECT user_id, username, user_password, user_email
  45.                 FROM ' . USERS_TABLE . "
  46.                 WHERE username='" . $username . "'";
  47.                         $result = $db->query($sql);       
  48.                         if ( $row = $db->fetch_record($result) )
  49.                         $db->free_result($result);
  50.                
  51.                         $member = array
  52.                         (
  53.                                 'time'                        => time(),
  54.                                 'username'                => $row["username"],
  55.                                 'password'                => $row["user_password"],
  56.                                 'email'                        => $row["user_email"]
  57.                         );
  58.                         $auth = passport_encrypt(passport_encode($member), $passportkey);
  59.                         setcookie("auth",$auth,0);
  60.                         $forward=$_POST['forward'];
  61.                         $forward= ($forward=="")?$YourWeb_Url:$redirect;       
  62.                         $verify = md5('login'.$auth.$forward.$passportkey);
  63.                         $auth=rawurlencode($auth);
  64.                         $forward=rawurlencode($forward);
  65.                         header("Location: ".$DiscuzBbs_Url."api/passport.php?action=login&auth=$auth&forward=$forward&verify=$verify");                       

  66.                 }
  67.     }
  68.     elseif ( $user->data['user_id'] != ANONYMOUS )
  69.     {
  70.                
  71.         $user->destroy();
  72.                
  73.                 //===========passport logout 整合开始===========================
  74.                 //=====================================================
  75.                 //=====================================================
  76.                 $YourWeb_Url="http://www.abc.com/index.php" //这里自己修改成网站首页的地址
  77.                 $DiscuzBbs_Url="http://www.abc.com/bbs/"   //这里换成论坛地址
  78.                 $passportkey="1234567890";        //论坛里设置的passportkey
  79.                
  80.                 $auth=$_COOKIE['auth'];
  81.                 setcookie("auth", "",time() - 3600);
  82.                 $forward=$_GET['forward'];
  83.                 $forward= ($forward=="")?$YourWeb_Url:$redirect;                               
  84.                 $verify = md5('logout'.$auth.$forward.$passportkey);
  85.                 $auth=rawurlencode($auth);
  86.                 $forward=rawurlencode($forward);
  87.                 header("Location: ".$DiscuzBbs_Url."api/passport.php?action=logout&auth=$auth&forward=$forward&verify=$verify");

  88.     }
  89.    
  90.     $redirect_url = ( isset($redirect) ) ? preg_replace('#^.*?redirect=(.+?)&(.+?)$#', '\\1' . $SID . '&\\2', $redirect) : 'index.php';
  91.     redirect($redirect_url);
  92. }

  93. //
  94. // Lost Password Form
  95. //
  96. $eqdkp->set_vars(array(
  97.     'page_title'    => sprintf($user->lang['title_prefix'], $eqdkp->config['guildtag'], $eqdkp->config['dkp_name']).': '.$user->lang['login_title'],
  98.     'template_file' => 'login.html')
  99. );
  100. if ( isset($lost_password) )
  101. {
  102.     $tpl->assign_vars(array(
  103.         'S_LOGIN' => false,
  104.         
  105.         'L_GET_NEW_PASSWORD' => $user->lang['get_new_password'],
  106.         'L_USERNAME'         => $user->lang['username'],
  107.         'L_EMAIL'            => $user->lang['email'],
  108.         'L_SUBMIT'           => $user->lang['submit'],
  109.         'L_RESET'            => $user->lang['reset'])
  110.     );
  111.    
  112.     $eqdkp->display();
  113. }

  114. //
  115. // Login form
  116. //
  117. elseif ( $user->data['user_id'] <= 0 )
  118. {
  119.     $tpl->assign_vars(array(
  120.         'S_LOGIN' => true,
  121.         
  122.         'L_LOGIN'             => $user->lang['login'],
  123.         'L_USERNAME'          => $user->lang['username'],
  124.         'L_PASSWORD'          => $user->lang['password'],
  125.         'L_REMEMBER_PASSWORD' => $user->lang['remember_password'],
  126.         'L_LOGIN'             => $user->lang['login'],
  127.         'L_LOST_PASSWORD'     => $user->lang['lost_password'],
  128.         
  129.         'ONLOAD' => ' onload="javascript:document.post.username.focus()"')
  130.     );
  131.    
  132.     $eqdkp->display();
  133. }
  134. else
  135. {
  136.     redirect('index.php'.$SID);
  137. }


  138. //=============================================================
  139. //=============以下为拷贝过来的函数=============================


  140. /**
  141. * Passport 加密函数
  142. *
  143. * @param                string                等待加密的原字串
  144. * @param                string                私有密匙(用于解密和加密)
  145. *
  146. * @return        string                原字串经过私有密匙加密后的结果
  147. */
  148. function passport_encrypt($txt, $key) {

  149.         // 使用随机数发生器产生 0~32000 的值并 MD5()
  150.         srand((double)microtime() * 1000000);
  151.         $encrypt_key = md5(rand(0, 32000));

  152.         // 变量初始化
  153.         $ctr = 0;
  154.         $tmp = '';

  155.         // for 循环,$i 为从 0 开始,到小于 $txt 字串长度的整数
  156.         for($i = 0; $i < strlen($txt); $i++) {
  157.                 // 如果 $ctr = $encrypt_key 的长度,则 $ctr 清零
  158.                 $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
  159.                 // $tmp 字串在末尾增加两位,其第一位内容为 $encrypt_key 的第 $ctr 位,
  160.                 // 第二位内容为 $txt 的第 $i 位与 $encrypt_key 的 $ctr 位取异或。然后 $ctr = $ctr + 1
  161.                 $tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
  162.         }

  163.         // 返回结果,结果为 passport_key() 函数返回值的 base65 编码结果
  164.         return base64_encode(passport_key($tmp, $key));

  165. }

  166. /**
  167. * Passport 解密函数
  168. *
  169. * @param                string                加密后的字串
  170. * @param                string                私有密匙(用于解密和加密)
  171. *
  172. * @return        string                字串经过私有密匙解密后的结果
  173. */
  174. function passport_decrypt($txt, $key) {

  175.         // $txt 的结果为加密后的字串经过 base64 解码,然后与私有密匙一起,
  176.         // 经过 passport_key() 函数处理后的返回值
  177.         $txt = passport_key(base64_decode($txt), $key);

  178.         // 变量初始化
  179.         $tmp = '';

  180.         // for 循环,$i 为从 0 开始,到小于 $txt 字串长度的整数
  181.         for ($i = 0; $i < strlen($txt); $i++) {
  182.                 // $tmp 字串在末尾增加一位,其内容为 $txt 的第 $i 位,
  183.                 // 与 $txt 的第 $i + 1 位取异或。然后 $i = $i + 1
  184.                 $tmp .= $txt[$i] ^ $txt[++$i];
  185.         }

  186.         // 返回 $tmp 的值作为结果
  187.         return $tmp;

  188. }

  189. /**
  190. * Passport 密匙处理函数
  191. *
  192. * @param                string                待加密或待解密的字串
  193. * @param                string                私有密匙(用于解密和加密)
  194. *
  195. * @return        string                处理后的密匙
  196. */
  197. function passport_key($txt, $encrypt_key) {

  198.         // 将 $encrypt_key 赋为 $encrypt_key 经 md5() 后的值
  199.         $encrypt_key = md5($encrypt_key);

  200.         // 变量初始化
  201.         $ctr = 0;
  202.         $tmp = '';

  203.         // for 循环,$i 为从 0 开始,到小于 $txt 字串长度的整数
  204.         for($i = 0; $i < strlen($txt); $i++) {
  205.                 // 如果 $ctr = $encrypt_key 的长度,则 $ctr 清零
  206.                 $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
  207.                 // $tmp 字串在末尾增加一位,其内容为 $txt 的第 $i 位,
  208.                 // 与 $encrypt_key 的第 $ctr + 1 位取异或。然后 $ctr = $ctr + 1
  209.                 $tmp .= $txt[$i] ^ $encrypt_key[$ctr++];
  210.         }

  211.         // 返回 $tmp 的值作为结果
  212.         return $tmp;

  213. }

  214. /**
  215. * Passport 信息(数组)编码函数
  216. *
  217. * @param                array                待编码的数组
  218. *
  219. * @return        string                数组经编码后的字串
  220. */
  221. function passport_encode($array) {

  222.         // 数组变量初始化
  223.         $arrayenc = array();

  224.         // 遍历数组 $array,其中 $key 为当前元素的下标,$val 为其对应的值
  225.         foreach($array as $key => $val) {
  226.                 // $arrayenc 数组增加一个元素,其内容为 "$key=经过 urlencode() 后的 $val 值"
  227.                 $arrayenc[] = $key.'='.urlencode($val);
  228.         }

  229.         // 返回以 "&" 连接的 $arrayenc 的值(implode),例如 $arrayenc = array('aa', 'bb', 'cc', 'dd'),
  230.         // 则 implode('&', $arrayenc) 后的结果为 ”aa&bb&cc&dd"
  231.         return implode('&', $arrayenc);

  232. }


  233. //=========================================================================
  234. //===========================拷贝结束======================================
  235. ?>
复制代码

[ 本帖最后由 huozhe3136 于 2006-5-31 16:41 编辑 ]
回复

使用道具 举报

aduybbm 发表于 2006-5-31 22:56:11 | 显示全部楼层

能帮我搞个ecms的通行证吗?

登陆源码如下:(已经整合discuz,只是单纯的调用discuz的数据,但不能同步登陆)
麻烦你了。老大,源码已经用附件上传了。
ecms程序下载地址:http://www.phome.net/tmp/ecms37/down.php?url=/tmp/ecms37/ecms3.7-free.rar
官方的整合插件,只能整合数据无法实现同步登陆:
http://www.phome.net/download/EmpireSoft/200504/soft111487951415006.html#edown

[ 本帖最后由 aduybbm 于 2006-5-31 23:40 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

puyang 发表于 2006-5-31 22:58:39 | 显示全部楼层
楼主,您好!很感谢您能够为我们提供这么好的程序来学习。
但是我现在还是没能成功整合ASP版的动易+Discuz!
您能提供一下动易的整合方法吗?动易一共有两个Login文件。而且动易的MD5是16位的,跟DISCUZ的32位不同。
另外动易有一个接口文件(动易安装目录/API/API_Response.asp)不知道是否需要。
动易的程序压缩包和接口文件规范官方下载页面:服务器防盗链无法直接提供链接,但是官方页面无需注册可以直接下载:http://www.powereasy.net/Soft/PE_soft/140.html
Login文件,代码已经改成了附件的形式:
上传Login文件:

[ 本帖最后由 puyang 于 2006-6-2 13:40 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

 楼主| huozhe3136 发表于 2006-5-31 23:17:44 | 显示全部楼层
大家以后要我帮忙整合用附件的形式吧,代码实在太长,而且也不够安全。。
我能帮得尽量帮,最好把自己的问题说得明白点。。。
还有就是你需要整合的系统的下载地址。。。我可以自己调试一下。。
实在不行加我qq:2666556  
msn: huozhe3136@hotmail.com

[ 本帖最后由 huozhe3136 于 2006-5-31 23:23 编辑 ]
回复

使用道具 举报

puyang 发表于 2006-5-31 23:20:32 | 显示全部楼层
不好意思,给您添麻烦了,我已经把代码改成了附件的形式方便页面的浏览。见#28楼

[ 本帖最后由 puyang 于 2006-5-31 23:22 编辑 ]
回复

使用道具 举报

 楼主| huozhe3136 发表于 2006-5-31 23:50:57 | 显示全部楼层
动易的默认管理登陆用户名和密码是什么。。。:)
我找来找去找不到。。
回复

使用道具 举报

fanshaoye 发表于 2006-6-1 06:02:49 | 显示全部楼层
关于整合DKP系统,使用了您给的login.php,设置通行证后,登陆时出错

  1. Parse error: parse error, unexpected T_VARIABLE in /home/XXX/public_html/mcdkp/login.php on line 44
复制代码

也就是填入论坛地址那行有问题,我已经填入正确的论坛地址~
回复

使用道具 举报

 楼主| huozhe3136 发表于 2006-6-1 09:13:43 | 显示全部楼层
原帖由 fanshaoye 于 2006-6-1 06:02 发表
关于整合DKP系统,使用了您给的login.php,设置通行证后,登陆时出错

Parse error: parse error, unexpected T_VARIABLE in /home/XXX/public_html/mcdkp/login.php on line 44
也就是填入论坛地址那行有问题,我 ...


不好意思,少了几个分号;
我传上来给你

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

 楼主| huozhe3136 发表于 2006-6-1 11:20:55 | 显示全部楼层
原帖由 aduybbm 于 2006-5-31 22:56 发表
登陆源码如下:(已经整合discuz,只是单纯的调用discuz的数据,但不能同步登陆)
麻烦你了。老大,源码已经用附件上传了。
ecms程序下载地址:http://www.phome.net/tmp/ecms37/down.php?url=/tmp/ecms37/ecms ...



已经整合好了,不过我还是调试不了,我的mysql的版本比较新,安装的时候老是出错。。。。
你自己调试,
第一步:将其覆盖 e/class/下的user.php
第二步:打开user.php 修改3处整合的地方的 $passportkey 和 $your_discuz_url 这两个变量

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-11-24 07:16 , Processed in 0.031562 second(s), 5 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表