主页 > 网络知识 > DISCUZ单点登录【原创】

DISCUZ单点登录【原创】

2013年3月5日 发表评论 查看评论

明月公司要做DISCUZ的单点登录,想从GLEASY这个WEB DESKTOP里面登录到DISCUZE。这个明月也不是专业的,就用了最简单的方法,就是通过一个页面做中转,帐号没有注册过,就用WEB DESKTOP这边的帐号注册一个DISCUZ帐号,有帐号就直接登录。

首先实现自动注册:
下载一个UCenter_1.6.0_SC_UTF8.zip,加压缩,将advance文件夹下的内容拷到现有的DISCUZ目录下,明月的路径是:

[root@storage1 examples]# pwd
/usr/local/Discuz/upload/examples
[root@storage1 examples]# ls
api  close.gif  code  config.inc.php  include  uc_client  ucexample.js

DISCUZ在nginx下面的配置是:

    server {
        listen          9999;
        server_name     discuz.dev.gleasy.cn discuz.dev.gleasy.com;
        access_log      logs/Discuz.access.log main;
        root /usr/local/Discuz/upload;
        index forum.php;
        location ~ \.php$ {
            root html;
            fastcgi_pass 127.0.0.1:9368;
            fastcgi_index forum.php;
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME   /usr/local/Discuz/upload$fastcgi_script_name;
        }
    }
nginx要启用fastcgi模块,并且要安装php-fpm,php-fpm监听的端口是9360.

然后明月用了下面的代码实现自动注册:
cat ./Discuz/upload/examples/code/autoreg.htm 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<HTML xmlns="http://www.w3.org/1999/xhtml">
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</HEAD>
<BODY>
<form id="form002" method="post" action="register_nodb.php">
<dl><dt>正在登录。。。。</dt><dd><input id="username002" name="username" type="hidden"></dd>
<dd><input id="password002" name="password" type="hidden"></dd>
<dd><input id="email002" name="email" type="hidden"></dd></dl>
<input name="submit002" type="submit" style="visibility: hidden;">
</form>
<script type="text/javascript" src="http://asset.gleasy.com/script/jquery/jquery-1.4.4.min.js"></script>
<script type="text/javascript" src="http://asset.gleasy.com/script/jquery/jquery-json.js"></script>
<script type="text/javascript" src="http://asset.gleasy.com/platform/os/assets/javascripts/core/api/gleasy.api.js?v=2.0
"></script>
#下面这段如果直接在浏览器访问这个页面,那么不会获取到任何消息,只有在WEB DESKTOP这边用过一个IFRAME去打开这个页面,就能获取到用户名,密码和邮件地址。
<script>
    gleasy.system.getCurrentUserInsecure({
        callback:function(dt){
            var name = dt.account;
            var email = dt.email;
            var passwd = dt.checksum;
            document.getElementById("username002").value=name;
            document.getElementById("password002").value=passwd.substr(1,16);
            document.getElementById("email002").value=email;
            document.getElementById("form002").submit();
       }
    });
</script>
</BODY>
</HTML>

 

cat ./Discuz/upload/examples/code/register_nodb.php

<?php
/**
 * UCenter 应用程序开发 Example
 *
 * 应用程序无数据库,用户注册的 Example 代码
 * 使用到的接口函数:
 * uc_user_register()   必须,注册用户数据
 * uc_authcode()        可选,借用用户中心的函数加解密 Cookie
 */
include '../config.inc.php';
include '../uc_client/client.php';
        //在UCenter注册用户信息
        $uid = uc_user_register($_POST['username'], $_POST['password'], $_POST['email']);
        if($uid <= 0) {
                if($uid == -1) {
                        echo '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />用户名不合法';
                } elseif($uid == -2) {
                        echo '包含要允许注册的词语';
                } elseif($uid == -3) {
                        echo "<script>location.href='../../index.php'</script>";
                } elseif($uid == -4) {
                        echo '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Email 格式有误';
                } elseif($uid == -5) {
                        echo '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Email 不允许注册';
                } elseif($uid == -6) {
                        echo '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />该 Email 已经被注册';
                } else {
                        echo '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />未定义';
                }
        } else {
                //注册成功,设置 Cookie,加密直接用 uc_authcode 函数,用户使用自己的函数
                $ucsynlogin = uc_user_synlogin($uid);
                echo "<script>location.href='../../index.php'</script>";
        }
?>

$uid == -3这里表示用户名已经注册,那么直接跳转到登录界面。这样每次单点登录的访问就从这个页面开始就可以了。

然后就是实现自动登录,这个明月通过改这个页面:

/usr/local/Discuz/upload/template/default/member/login_simple.htm

在文件的最后加上下面这段:

        </form>
 
        <script type="text/javascript" src="http://asset.gleasy.com/script/jquery/jquery-1.4.4.min.js"></script>
        <script type="text/javascript" src="http://asset.gleasy.com/script/jquery/jquery-json.js"></script>
        <script type="text/javascript" src="http://asset.gleasy.com/platform/os/assets/javascripts/core/api/gleasy.api.js?v=2.0"></script>
 
        <script>
        gleasy.system.getCurrentUserInsecure({
            callback:function(dt){
                var name = dt.account;
                var passwd = dt.checksum;
                document.getElementById("ls_username").value=name;
                document.getElementById("ls_password").value=passwd.substr(1,16);                
                document.getElementById("lsform").submit();
           }
        });
        </script>
 
        <!–{if $_G['setting']['pwdsafety']}–>
                <script type="text/javascript" src="{$_G['setting']['jspath']}md5.js?{VERHASH}" reload="1"></script>
        <!–{/if}–>

这样子就可以了,当在WEB DESKTOP里面打开/examples/code/autoreg.htm这个页面就能调转到index.php然后自动登录进DISCUZ.

最后要要设置两个地方,在管理页面设置一下UCENTER和DISCUZ的通信,这个网上很多相同的文章,明月就不重复了。最后记得下面两个地方要设置:
1.禁用掉外部用户注册,只允许从WEB DESKTOP这边过去自动注册。

2.自动激活用户,不然的话第一次登录会出现一个激活页面。

明月用的DISCUZ版本是Discuz_X2.5。

原创文章,转载请注明: 转载自肚腩照明月'blog

本文链接地址: DISCUZ单点登录【原创】

文章的脚注信息由WordPress的wp-posturl插件自动生成


  1. 本文目前尚无任何评论.

SEO Powered by Platinum SEO from Techblissonline