我做了一个第三方登陆,可就是不行,在自己写的一个登陆页面登陆成功后可是跳转到discuz还是显示没有登陆状态。
我是在本地做的测试。
<html>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<head>
<title>dz登陆</title>
</head>
<body>
<form action="" method="post" name="frm">
用户名:<input type="text" name="username" size="20" />
<br />
密码:<input type="password" name="password" size="20" />
<br />
<input type="submit" value="登陆">
</form>
</body>
<html>
<?php
if(!empty($_POST))
{
require_once 'discuz/config.inc.php';
require_once 'discuz/uc_client/client.php';
list($uid, $username, $password, $email) = uc_user_login($_POST['username'], $_POST['password']);
if($uid > 0) {
echo '登录成功';
echo uc_user_synlogin($uid);
echo "<script type='text/javascript'>location='discuz/index.php';</script>";
} elseif($uid == -1) {
echo '用户不存在,或者被删除';
} elseif($uid == -2) {
echo '密码错';
} else {
echo '未定义';
}
}
?>
请高人指点
我是在本地做的测试。
<html>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<head>
<title>dz登陆</title>
</head>
<body>
<form action="" method="post" name="frm">
用户名:<input type="text" name="username" size="20" />
<br />
密码:<input type="password" name="password" size="20" />
<br />
<input type="submit" value="登陆">
</form>
</body>
<html>
<?php
if(!empty($_POST))
{
require_once 'discuz/config.inc.php';
require_once 'discuz/uc_client/client.php';
list($uid, $username, $password, $email) = uc_user_login($_POST['username'], $_POST['password']);
if($uid > 0) {
echo '登录成功';
echo uc_user_synlogin($uid);
echo "<script type='text/javascript'>location='discuz/index.php';</script>";
} elseif($uid == -1) {
echo '用户不存在,或者被删除';
} elseif($uid == -2) {
echo '密码错';
} else {
echo '未定义';
}
}
?>
请高人指点
不过看楼主额代码就知道,还没完全明白
DZ的同步登陆返回的是JS的<script>完整的代码,这些返回的数据需要你添加到页面中去,而且必须被执行,才能实现相应站点的同步登陆。你现在的代码,想破脑袋都不可能实现同步登陆的
你好像直接调用dz的登陆api了 这样不行
同步登陆也是要通过UC再转向dz
如果相同,自己实现disuz的用户登录和验证就行了。登录时写cookie变量auth或sid,验证登录的时候,先验证auth再验证sid。
如果不同,那要在第三方上安装UC,然后在两边配置同步登录。
代码如下:if($action == 'login') {
//通过接口判断登录帐号的正确性,返回值为数组
list($uid, $username, $password, $email) = uc_user_login(u2g($_POST['username']), $_POST['password']);//登录 if($uid > 0) {
$member = $db->fetch_first("SELECT m.uid AS discuz_uid, m.username AS discuz_user, m.password AS discuz_pw, m.secques AS discuz_secques,
m.email, m.adminid, m.groupid, m.styleid AS styleidmem, m.lastvisit, m.lastpost, u.allowinvisible
FROM {$tablepre}members m LEFT JOIN {$tablepre}usergroups u USING (groupid)
WHERE m.uid='$uid'");//查询
// print_r($member);
extract($member);
$discuz_userss = $discuz_user;
$discuz_user = addslashes($discuz_user);
$cookietime = intval(isset($_POST['cookietime']) ? $_POST['cookietime'] : 0); dsetcookie('cookietime', $cookietime, 31536000);
dsetcookie('auth', authcode("$discuz_pw\t$discuz_secques\t$discuz_uid", 'ENCODE'), $cookietime, 1, true);
dsetcookie('loginuser');
dsetcookie('activationauth');
dsetcookie('pmnum');
$sessionexists = 0; updatesession();
$ucsynlogin = $allowsynlogin ? uc_user_synlogin($discuz_uid) : '';//数据更新 echo "登录成功!";}else{ echo "登录失败!":}}
session_start();
/*
[Discuz!] (C)2001-2007 Comsenz Inc.
This is NOT a freeware, use is subject to license terms $Id: logging.php 10115 2007-08-24 00:58:08Z cnteacher $
*/define('NOROBOT', TRUE);
define('CURSCRIPT', 'logging');require_once './include/common.inc.php';
require_once DISCUZ_ROOT.'./include/misc.func.php';
哦,对了,还有个formhash函数,你要拖个参数在post页面后面。。