discuz Passport 通行证 整合笔记

太简单了,但时间长了,记不得,浪费我半小时找资料,深刻体会好记性不如烂笔头!!今天把passport文挡贴上,防止以后忘记!!记住,网上找到自己需要的资料也要耗时间的!!!!!!

Passport 通行证 整合

第一篇:整合原理

请注意: 整合不成功可能造成的后果-----dz论坛无法登录,无法管理
解决办法:
第一步: 到dz的数据库表cdb_settings 找到下面这几行修改为

setting.gif (4.3 KB)

2006-9-30 13:59

第二步: 删除dz安装目录/forumdata/cache/cache_settings.php
第三步: 重新访问论坛

登陆和注册整合流程
用户从登陆或注册表单提交帐号密码信息 ==>
主站程序检验用户登陆或注册,成功(注册需要生成新用户)则 ==>
设置主站自身的cookie或session    ==>
url传递 返回地址forward和编码后的用户信息和其他信息 到dz/api/passport.php

整合之前请先仔细阅读官方passport技术文档: http://www.discuz.net/usersguide/advanced_passport.htm

复制内容到剪贴板

代码:
<?php
//该文档保存为login.php
//首先将接口技术文档里的加密解密函数拷贝
//为了不让代码太乱,我拷贝到文档的结尾处
//假设自己的用户数据库表里用户名字段为UserName, 密码字段为Pwd, Email字段为 Email
//注册页实现方法差不多,可自行实现,疑问加我QQ:2666556

$act=(isset($_GET['act']))?$_GET['act']:"login";
if(function_exists($act)) $act();else login();

function login()
{        
        $ErrMsg=UserCheck();
        if($ErrMsg!="")echo $ErrMsg;        
        //后面加上显示你的登陆表单的代码 如
?>
<form action=login.php?act=login method=post>
用户名:<input name=username>
密码:<input name=password>
<input name=submit type=submit value=登陆></form>
<?php

}//end function

function logout()//登出
{
        $passportkey="1234567890";//这里换成你论坛通行证设置的passportkey
        $auth=$_COOKIE['auth'];
        setcookie("auth", "",time() - 3600);
        $forward=$_GET['forward'];
        if($forward=="")$forward="../../index.php";//这里换成你的主页绝对地址或相对地址                                       
        $verify = md5('logout'.$auth.$forward.$passportkey);
        $auth=rawurlencode($auth);
        $forward=rawurlencode($forward);
        header("Location: bbs/api/passport.php?action=logout&auth=$auth&forward=$forward&verify=$verify");
}

function UserCheck()
{        
        $passportkey="1234567890";//这里换成你论坛通行证设置的passportkey

//===========验证输入=====================
        if(!isset($_POST['submit'])) return; // login表单的按钮需要与此同名
        $usnm=$_POST['username'];//username换成你登陆表单里的用户名域                        
        $pwd=$_POST['password'];//password换成你登陆表单里的密码域                        
        if($usnm=="") return "请输入用户名!";
        if($pwd=="") return "请输入密码!";

//=========数据库处理==========================
        $db=mysql_connect("localhost", "root", "");
        mysql_select_db("your_db_name");
$sql="Select * from `user` where UserName='".$usnm."' Limit 1";        
        $rs = mysql_query($sql,$db)        ;
        $row = mysql_fetch_array($rs);
        if(!$row)return "该用户不存在";
        if($row["Pwd"]!=md5($pwd))return "密码错误";
        mysql_free_result($rs);

//==============header到bbs=====================        
        $member = array
        (
                        'time'     => time(),
                        'username' => $row["UserName"],
                        'password' => $row["Pwd"],
                        'email'    => $row["Email"]
        );
        $auth = passport_encrypt(passport_encode($member), $passportkey);
        setcookie("auth",$auth,($_POST["Cookie"]? time()+(int)$_POST["Cookie"] :0));
        $forward=$_POST['forward'];
        if($forward=="")$forward="../../index.php";                                       
        $verify = md5('login'.$auth.$forward.$passportkey);
        $auth=rawurlencode($auth);
        $forward=rawurlencode($forward);
        header("Location: bbs/api/passport.php?action=login&auth=$auth&forward=$forward&verify=$verify");

}

//=============================================================
//=============以下为拷贝过来的函数============================
function passport_encrypt($txt, $key) {
        srand((double)microtime() * 1000000);
        $encrypt_key = md5(rand(0, 32000));        
        $ctr = 0;
        $tmp = '';
        for($i = 0; $i < strlen($txt); $i++) {
                        $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
                        $tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
        }
        return base64_encode(passport_key($tmp, $key));
}

function passport_decrypt($txt, $key) {
        $txt = passport_key(base64_decode($txt), $key);
        $tmp = '';
        for ($i = 0; $i < strlen($txt); $i++) {
                 $tmp .= $txt[$i] ^ $txt[++$i];
        }
        return $tmp;
}

function passport_key($txt, $encrypt_key) {
        $encrypt_key = md5($encrypt_key);
        $ctr = 0;
        $tmp = '';
        for($i = 0; $i < strlen($txt); $i++) {
                        $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
                        $tmp .= $txt[$i] ^ $encrypt_key[$ctr++];
        }
        return $tmp;
}

function passport_encode($array) {
        $arrayenc = array();
        foreach($array as $key => $val) {
                   $arrayenc[] = $key.'='.urlencode($val);
        }
        return implode('&', $arrayenc);

}
//=========================================================================
//===========================拷贝结束======================================
?>

(0)

相关推荐

  • discuz Passport 通行证 整合笔记

    太简单了,但时间长了,记不得,浪费我半小时找资料,深刻体会好记性不如烂笔头!!今天把passport文挡贴上,防止以后忘记!!记住,网上找到自己需要的资料也要耗时间的!!!!!! Passport 通行证 整合第一篇:整合原理 请注意: 整合不成功可能造成的后果-----dz论坛无法登录,无法管理解决办法: 第一步: 到dz的数据库表cdb_settings 找到下面这几行修改为 setting.gif (4.3 KB) 2006-9-30 13:59 第二步: 删除dz安装目录/forumda

  • Discuz! Passport 通行证整合

    解决办法: 第一步: 到dz的数据库表cdb_settings 找到下面这几行修改为 第二步: 删除dz安装目录/forumdata/cache/cache_settings.php第三步: 重新访问论坛 登陆和注册整合流程用户从登陆或注册表单提交帐号密码信息 ==>主站程序检验用户登陆或注册,成功(注册需要生成新用户)则 ==>设置主站自身的cookie或session    ==>url传递 返回地址forward和编码后的用户信息和其他信息 到dz/api/passport.php

  • 利用discuz自带通行证整合dedecms的方法以及文件下载

    整合discuz的通行证:利用discuz自带通行证整合dede的方法以及文件下载 首先感谢柏拉图提供这么好的免费程序在论坛上看到大家很多都想整合discuz.我想柏拉图肯定会弄一个非常完善的dede的通行证.在没有出来之前我们就用discuz自带的通行证吧.个人看了一下还是非常不错的.一:前提准备以及版本:dede版本:3.1 lit版,3.1正式版上测试都通过discuz版本.用的是最新的5.0版本二:主要涉及几个文件1:dede:(1)include/config_passport.php

  • 关于DISCUZ不用通行证登陆得内容介绍第1/2页

    关于DISCUZ不用通行证登陆得内容介绍 DISCUZ是中国最常用的论坛,虽然他本身有通行证给大家连接,但实际上用户的统一还是很不好,经常要建立两个用户表,第一不利于注册和管理,第二浪费数据库. 最近做一个项目也是使用的DISCUZ,所以研究了一下DISCUZ的登陆,基本完成了同步登陆.大家如果有兴趣可以研究一下. 别的不废话了,如果你自己写的系统,可以直接用DISCUZ的公用文件,直接引用include/common.inc.php就好了,这样最简单了,只要引用这个文件,$discuz_uid

  • discuz 跨域整合的记录文件

    \\create by ahuinan 2009-6-22 \\up by ahuian 2009-6-23 \\up by ahuinan 2009-6-24 1.将common项目中的md5函数代码更改为: 复制代码 代码如下: return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str, "MD5").ToLower().Substring(8, 16); 实现主站与论

  • Discuz!NT 论坛整合ASP程序论坛

    复制代码 代码如下: <%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%> <!--#include virtual="/inc/MD5.asp"--> <!--#include virtual="/Inc/conn.asp" --> <% '16 md5 1234656789 323b453885f5181f ' discuz 25f9e794323b4

  • discuz 2.0整合asp系统,用户添加函数

    函数可以参考: 复制代码 代码如下: <% '注册论坛用户,参数说明 'username 用户登录名称 'password 用户有登录密码 'groupid 用户组id,高级会员,用户组id为17:正式会员,用户组id为18;普通会员,则用户组id为10 'email,realname,mobile,phone 电子邮件,真实姓名,手机,电话 sub regbbsuser(username,password,groupid,email,realname,mobile,phone) '数据库连接

  • Discuz!NT 论坛整合ASP程序论坛教程

    复制代码 代码如下: 登陆时记录cookies页面代码 <!--#include file="md5.asp"--> //32位md5加密文件,一定得调用,该文件到处有,我就不提供了 <% dim Username,Password,Question,Answer,Expires,Verify Username=replace(trim(Request.form("Username")),"'","''")

  • java(jsp)整合discuz同步登录功能详解

    最近做了一个资源库系统的项目,老师说可以搭建开源论坛替代自己开发社交模块,正好在开源中国上看到了一个利用discuz的UCenter功能实现同步登录的开源项目(https://code.google.com/p/discuz-ucenter-api-for-java/),不禁大喜,于是花了几个小时照着教程操作了一遍,居然很轻松的成功了,特写此文以做纪念.. Uenter是Comsenz旗下各个产品之间信息直接传递的一个桥梁,通过UCenter站长可以无缝整合Comsenz系列产品,实现用户的一站

  • Discuz!NT 3与asp.net 整合的实例教程

    如果编码方面有不严谨的地方,还希望各位多多包涵,并给出中肯的意见. 整合需要在原项目中添加由Discuz!NT提供的 DiscuzToolkit语言包(c#) 另外为了方便整合,我还自己写了一个简单的项目DNTAddNETSNS,用来对Discuz!NT和SNS做一些简单的粘合. 现在向大家展示一下涉及API调用的一些代码片段: 复制代码 代码如下: //之间为DNT的整合代码 Try { Discuz.Toolkit.DiscuzSession ds = ConformityHandler.I

随机推荐