discuz之同步登入

前言

首先感谢dozer学长吧UCenter翻译成C#


博客地址----------->http://www.dozer.cc/

其次感谢群友快乐々止境同学的热心指导,虽然萍水相逢但让我感受到了世界的温暖

Discuz搭建

同步登入

Discuz是康盛公司下的一套通用的社区论坛软件系统

康盛公司还有其他产品,为了让多个网站一个账号登入就能畅通无阻,于是有了UCenter

本篇介绍Asp.Net网站与Discuz实现同步登入

建议去看看dozer自己写教程http://www.dozer.cc/2011/01/ucenter-api-in-depth-1st.html
我这里大部分是搬运他的
首先获得UCenter For .Nethttps://github.com/dozer47528/UCenter-API-For-DotNet

什么是UCenter呢,其实我也不太懂
简单的说,它也是个网站,可以管N个网站的用户

官方介绍

我简单说下同步登入流程

类库概况

类库分为以下几个部分

  1. Api 用于提供给 UCenter 调用的结构
  2. Client 用于调用 UCenter 的接口,网站程序调用的
  3. Model 调用过程中的一些数据封装
  4. UcConfig 静态类,读取上面的配置文件(App.config或Web.config)信息
  5. UcUtility 一些常用函数
  6. App.config 配置文件示例

如果Discuz安装成功,你能在UCenter的的应用管理看到你的Discuz

现在添加一个网站,并让UCenter管理这个网站

新建一个空的Asp.Net Web应用程序,记得引用类库

右键网站项目-->属性--->Web发现我找到项目URL,记住这个URL等会用

到这里当然不能进行同步登入

现在你的新网站和UCenter还是老死不相往来状态

网站与UCenter关联

提交完后会在最下面生成配置信息

define(‘UC_CONNECT‘, ‘mysql‘);

define(‘UC_DBHOST‘, ‘localhost‘);

define(‘UC_DBUSER‘, ‘root‘);

define(‘UC_DBPW‘, ‘123456‘);

define(‘UC_DBNAME‘, ‘ultrax‘);

define(‘UC_DBCHARSET‘, ‘gbk‘);

define(‘UC_DBTABLEPRE‘, ‘`ultrax`.pre_ucenter_‘);

define(‘UC_DBCONNECT‘, ‘0‘);

define(‘UC_KEY‘, ‘FD144298AF7E4797A66ACC0C18C97EA3‘);

define(‘UC_API‘, ‘http://localhost:8080/uc_server‘);

define(‘UC_CHARSET‘, ‘gbk‘);

define(‘UC_IP‘, ‘‘);

define(‘UC_APPID‘, ‘2‘);

define(‘UC_PPP‘, ‘20‘);

返回应用中心你会发现你刚刚添加的通信失败,这很正常,因为你的网站还没配置

这些PHP配置信息要填到Web.config中,下面给你个模板填

一一对应填入,可能上面有的下面没有,没事.上面红色标注的是,上面与下面都有的项

 1 <configuration>
 2   <system.web>
 3     <compilation debug="true" targetFramework="4.0"/>
 4     <pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID"/>
 5   </system.web>
 6   <appSettings>
 7     <!--客户端版本-->
 8     <add key="UC_CLIENT_VERSION" value="1.5.2"/>
 9     <!--发行时间-->
10     <add key="UC_CLIENT_RELEASE" value="20101001"/>
11     <!--API 开关(value类型:True False 默认值:True)-->
12     <!--是否允许删除用户-->
13     <add key="API_DELETEUSER" value="True"/>
14     <!--是否允许重命名用户-->
15     <add key="API_RENAMEUSER" value="True"/>
16     <!--是否允许得到标签-->
17     <add key="API_GETTAG" value="True"/>
18     <!--是否允许同步登录-->
19     <add key="API_SYNLOGIN" value="True"/>
20     <!--是否允许同步登出-->
21     <add key="API_SYNLOGOUT" value="True"/>
22     <!--是否允许更改密码-->
23     <add key="API_UPDATEPW" value="True"/>
24     <!--是否允许更新关键字-->
25     <add key="API_UPDATEBADWORDS" value="True"/>
26     <!--是否允许更新域名解析缓存-->
27     <add key="API_UPDATEHOSTS" value="True"/>
28     <!--是否允许更新应用列表-->
29     <add key="API_UPDATEAPPS" value="True"/>
30     <!--是否允许更新客户端缓存-->
31     <add key="API_UPDATECLIENT" value="True"/>
32     <!--是否允许更新用户积分-->
33     <add key="API_UPDATECREDIT" value="True"/>
34     <!--是否允许向UCenter提供积分设置-->
35     <add key="API_GETCREDITSETTINGS" value="True"/>
36     <!--是否允许获取用户的某项积分-->
37     <add key="API_GETCREDIT" value="True"/>
38     <!--是否允许更新应用积分设置-->
39     <add key="API_UPDATECREDITSETTINGS" value="True"/>
40     <!--API 开关结束-->
41     <!--返回值设置-->
42     <!--返回成功(默认:1)-->
43     <add key="API_RETURN_SUCCEED" value="1"/>
44     <!--返回失败(默认:-1)-->
45     <add key="API_RETURN_FAILED" value="-1"/>
46     <!--返回禁用(默认:-2)-->
47     <add key="API_RETURN_FORBIDDEN" value="-2"/>
48     <!--返回值设置结束-->
49
50
51     <!--[必填]通信密钥-->
52     <add key="UC_KEY" value="FD144298AF7E4797A66ACC0C18C97EA3"/>
53     <!--[必填]UCenter地址-->
54     <add key="UC_API" value="http://localhost:8080/uc_server"/>
55     <!--[必填]默认编码-->
56     <add key="UC_CHARSET" value="gbk"/>
57     <!--[非必填]UCenter IP-->
58     <add key="UC_IP" value=""/>
59     <!--[必填]应用ID-->
60     <add key="UC_APPID" value="2"/>
61   </appSettings>
62 </configuration>

这样以后,我的网站就能更UCenter交流

但是具体怎么交流?

这里我就创建一个ashx做示范

Talk is cheap.Show you the code

 1 public void ProcessRequest(HttpContext context)
 2 {
 3     context.Response.ContentType = "text/html";
 4     IUcClient client = new UcClient();
 5     var user = client.UserLogin("us1", "111111");//登陆
 6     var js=client.UserSynlogin(user.Uid);//返回一个js代码,这是同步登入的关键
 7     if (user.Result==LoginResult.Success)
 8     {
 9         context.Response.Write(js);
10         context.Response.Write(user.UserName);
11     }
12 }

这是一段通知UCenter,us1用户登入,同时通知被UCenter管理的其他应用登入的代码

上面可以认为是我的网站去找UCenter,但是UCenter怎么找我,所谓通信必须是你来我往

添加一个API文件夹,在下面添加一个uc.ashx(是不是很眼熟,没错刚刚在UCenter应用管理中心就是设置了这个)

让uc继承UcApiBase,实现其抽象方法

删除 uc.ashx的ProcessRequest 方法 因为UcApiBase里面有了

好启动你的网站

  • 确保你的iis启动着
  • wampserver正常运行,要绿绿的(MySQL启动着,本来是一篇文章被我拆成两篇,所以这里有点突兀)
  • 确保你的Discuz能访问
  • 确保UCenter中的配置与Web.Config正确
  • 确保你的新网站在服务器运行

启动后你会发现UCenter应用中心,原本的通信失败变成成功

访问TestHandler.ashx

如果成功页面会显示这个用户的用户名

跳转到Discuz,你会发现你的用户已登入

接下来解释下这过程

这个图能解释TestHandler.ashx的ProcessRequest

返回的js将再浏览器中执行

它会请求discuz网站下的UCenterApi,它会告诉Discuz是谁登入了

这段js也解释了为什么uc.ashx必须放在一个api文件夹下

这样同步登入就大致说完了

下面说说

discuz同步登入你的网站

到你的discuz网站下的uc_client\data\cache

找到apps.php

 1 <?php
 2 $_CACHE[‘apps‘] = array (
 3   1 =>
 4   array (
 5     ‘appid‘ => ‘1‘,
 6     ‘type‘ => ‘DISCUZX‘,
 7     ‘name‘ => ‘Discuz! Board‘,
 8     ‘url‘ => ‘http://localhost:8080‘,
 9     ‘ip‘ => ‘‘,
10     ‘viewprourl‘ => ‘‘,
11     ‘apifilename‘ => ‘uc.php‘,
12     ‘charset‘ => ‘‘,
13     ‘dbcharset‘ => ‘‘,
14     ‘synlogin‘ => ‘1‘,
15     ‘recvnote‘ => ‘1‘,
16     ‘extra‘ => false,
17     ‘tagtemplates‘ => ‘‘,
18     ‘allowips‘ => ‘‘,
19   ),
20  );
21  ?>

造它的样子抄一份,注意适当得修改

 1 <?php
 2 $_CACHE[‘apps‘] = array (
 3   1 =>
 4   array (
 5     ‘appid‘ => ‘1‘,
 6     ‘type‘ => ‘DISCUZX‘,
 7     ‘name‘ => ‘Discuz! Board‘,
 8     ‘url‘ => ‘http://localhost:8080‘,
 9     ‘ip‘ => ‘‘,
10     ‘viewprourl‘ => ‘‘,
11     ‘apifilename‘ => ‘uc.php‘,
12     ‘charset‘ => ‘‘,
13     ‘dbcharset‘ => ‘‘,
14     ‘synlogin‘ => ‘1‘,
15     ‘recvnote‘ => ‘1‘,
16     ‘extra‘ => false,
17     ‘tagtemplates‘ => ‘‘,
18     ‘allowips‘ => ‘‘,
19   ),
20   2 =>
21   array (
22     ‘appid‘ => ‘2‘,
23     ‘type‘ => ‘OTHER‘,
24     ‘name‘ => ‘MyWebSite‘,
25     ‘url‘ => ‘http://localhost:7067‘,
26     ‘ip‘ => ‘‘,
27     ‘viewprourl‘ => ‘‘,
28     ‘apifilename‘ => ‘uc.ashx‘,
29     ‘charset‘ => ‘‘,
30     ‘dbcharset‘ => ‘‘,
31     ‘synlogin‘ => ‘1‘,
32     ‘recvnote‘ => ‘1‘,
33     ‘extra‘ => false,
34     ‘tagtemplates‘ => ‘‘,
35     ‘allowips‘ => ‘‘,
36   ),
37   );
38 ?>

问我为什么要做这个,其实我也不知道,反正如果不这样改的话,你在discuz登入时候,不会像上面一样返回一段js给你,更别说同步登入

这样就能同步登入了

当在discuz登入的时候,将触发你的网站的uc.asxh的public override ApiReturn SynLogin(int uid)方法

你可以在这里写你的操作

比如

时间: 2024-10-27 09:28:11

discuz之同步登入的相关文章

无需激活直接同步登入discuz,php代码(直接可用)

1 <?php 2 /** 3 * 抽奖 4 * @param int $total 5 */ 6 function getReward($total=1000) 7 { 8 $win1 = floor((0.12*$total)/100); 9 $win2 = floor((3*$total)/100); 10 $win3 = floor((12*$total)/100); 11 $other = $total-$win1-$win2-$win3; 12 $return = array();

配置路由器/交换机的Telnet登入

[实验名称] 在路由器上配置Telnet. [实验目的] 掌握如何在路由器上配置 Telnet,以实现路由器的远程登录访问. [背景描述] 路由器用于连接多个子网时,通常放置位置都相距较远,察看和修改配置都比较麻烦, 此时如果可以远程登录到路由器上进行操作,将能够大大降低管理员的工作量. [需求分析] 需要掌握如何配置路由器的密码,如何配置 Telnet 服务,以及如何通过 Telnet 远程登录 路由器进行操作的方法. [实验设备] 路由器(带串口)     2台 V.35 DCE/DTE 线

discuz 用户同步,注册等

一查. 3种解决途径 UCenter. 直接和数据库交互. 模拟登录. 1. 查看官方只有PHP的SDK. 而且只有SDK . 你想知道他怎么运作的.只能看PHP源码,可是不懂PHP.   随而放弃. 2. 完全不知道他加密的方式. 而且服务器限制也多.PASS 3. 看到一半发现,新需求是必须取消论坛注册. 于是回到了第一方案. 因为找到了一个解决办法,有人早就遇到这个问题并解决了. 如果要看原文请点击这里 首先他原理其实很简单. 就是你访问   discuz  uc.php  你调用它的接口

linux下查看用户登入系统相关命令及编写脚本(七)

查看用户登入系统日志 1.w 显示谁登入并正在做什么事 2.who 显示谁登入 -r:显示系统运行级别 3.sleep 睡眠命令(sleep 5 睡眠5秒后醒来) 4.whoami 显示用户名或UID 5.last:显示/var/log/wtmp文件,显示用户登录历史及系统重启历史 -n 3: 显示最近3次的相关信息 6.lastb:显示/var/log/btmp文件,显示用户错误的登录尝试 -n 3: 显示最近3次的错误的登录尝试 7.lastlog: 显示每一个用户最近一次的成功登录信息:

Citrix Receiver登入的时候报找不到ICAWebWrapper插件

其实这个问题我在一开始做Citrix项目的时候就遇到很多客户端PC安装Receiver的时候登入云桌面的时就提示"Citrix Receiver提示找不到ICAWebWrapper.msi插件"有时候连卸载都无法卸载掉Citrix Receiver,用clear工具也不行,最后只能从新安装操作系统,这样导致客户和实施方带来了很多不便,特别是财务和一些特殊的办公电脑是不给重新安装操作系统. 最近我在上海实施的时候用户方就提出全院大概30%用户都报这个错误,要求必须解决这个问题,刚开始我们

连接数据库:登入与处理

登入就是提取数据库中的信息 先建立一个登入页面: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta

模拟操作银行登入页面。。。未连接数据库

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <

第七十五天上课 php注册登入审核和文件上传

文件上传 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>文件上传</title> <?php if(!(empty($_FILES['file']) || empty($_POST['submit']))) { $urls="./my-img/".$_FILES['file']['name']; /

(5.17)QQ登入视图

//  ViewController.h//  qq登入器////  Created by pg on 14-5-17.//  Copyright (c) 2014年 mqd. All rights reserved.#import <UIKit/UIKit.h>@interface ViewController : UIViewController <UITextFieldDelegate> //定义输入账号@property (weak, nonatomic) IBOutlet