前言

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

博客地址----------->http://www.dozer.cc/
 
其次感谢群友快乐々止境同学的热心指导,虽然萍水相逢但让我感受到了世界的温暖
 

同步登入

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. <add key="UC_KEY" value="FD144298AF7E4797A66ACC0C18C97EA3"/>
  52. <!--[必填]UCenter地址-->
  53. <add key="UC_API" value="http://localhost:8080/uc_server"/>
  54. <!--[必填]默认编码-->
  55. <add key="UC_CHARSET" value="gbk"/>
  56. <!--[非必填]UCenter IP-->
  57. <add key="UC_IP" value=""/>
  58. <!--[必填]应用ID-->
  59. <add key="UC_APPID" value="2"/>
  60. </appSettings>
  61. </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. ");//登陆
  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. =>
  4. array (
  5. ',
  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. ',
  15. ',
  16. 'extra' => false,
  17. 'tagtemplates' => '',
  18. 'allowips' => '',
  19. ),
  20. =>
  21. array (
  22. ',
  23. 'type' => 'OTHER',
  24. 'name' => 'MyWebSite',
  25. 'url' => 'http://localhost:7067',
  26. 'ip' => '',
  27. 'viewprourl' => '',
  28. 'apifilename' => 'uc.ashx',
  29. 'charset' => '',
  30. 'dbcharset' => '',
  31. ',
  32. ',
  33. 'extra' => false,
  34. 'tagtemplates' => '',
  35. 'allowips' => '',
  36. ),
  37. );
  38. ?>
 
问我为什么要做这个,其实我也不知道,反正如果不这样改的话,你在discuz登入时候,不会像上面一样返回一段js给你,更别说同步登入
 
这样就能同步登入了
当在discuz登入的时候,将触发你的网站的uc.asxh的public override ApiReturn SynLogin(int uid)方法
你可以在这里写你的操作
比如

 
 
 
 
 
 
 

discuz之同步登入的更多相关文章

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

    <?php /** * 抽奖 * @param int $total */ function getReward($total=1000) { $win1 = floor((0.12*$tota ...

  2. 【Android Training - UserInfo】记住登入用户的信息[Lesson 1 - 使用AccountManager来记住用户]

    Remembering Your User[记住你的用户] 每一个人都非常喜欢自己的名字能被人记住.当中最简单,最有效的使得你的app让人喜欢的方法是记住你的用户是谁,特别是当用户升级到一台新的设备或 ...

  3. Python爬虫笔记【一】模拟用户访问之提交表单登入—第二次(7)

    在第一次登入时遇到这个问题,页面验证码与下载下来需要识别的验证码不同的问题,从网上查寻说是叫验证码同步问题.发现是用cookie解决的,那次cookie介绍到通过cookie就可以实现时间戳同步问题, ...

  4. 鸟哥Linux私房菜(基础篇)——第五章:首次登入与在线求助 man page笔记

    1.X Winsows与文本模式的切换 ●[Ctrl] + [Alt] + [F1] ~ [F6] :文字接口登入 tty1 ~ tty6 终端机.        ●[Ctrl] + [Alt] + ...

  5. 手游聚合SDK开发之远程开关---渠道登入白名单

    白名单有啥好说的呢?无非就是筛选登入,大家第一眼看到就是这个印象,白名单也是有文章的,弄的时机不同会给你带来很不错的收益,注意是收益.还是举例来说,游戏上线前渠道都会做一个预下载,一般提前1-2天,这 ...

  6. javaweb 基于java Servlet登入 简单入门案例

    项目流程 第一步:创建一个java webproject第二步:创建三个界面,1,login.jsp 2 success.jsp 3 fail.jsp第三步:更改新建界面编码格式,utf-8 默然编码 ...

  7. [ASP.NET MVC] ASP.NET Identity登入技术应用

    [ASP.NET MVC] ASP.NET Identity登入技术应用 情景 ASP.NET Identity是微软所贡献的开源项目,用来提供ASP.NET的验证.授权等等机制.在ASP.NET I ...

  8. [ASP.NET MVC] ASP.NET Identity登入技术剖析

    [ASP.NET MVC] ASP.NET Identity登入技术剖析 前言 ASP.NET Identity是微软所贡献的开源项目,用来提供ASP.NET的验证.授权等等机制.本篇文章介绍ASP. ...

  9. C#登入例子--第一个程序

    第一步:在数据库创建一个存放账号密码的表单 第二步:创建一个登入项目 拆分成三层: CS层: BLL层: DAL层: Common层: Web.config:

随机推荐

  1. windows下如何修改远程登录端口

    windows下如何修改远程登录端口 windows远程桌面默认端口为3389,修改 方法如下:在"开始>运行"中输入"regedit" 点击“确定”,打 ...

  2. WindowsApi 解压缩文件

    .解压方法 转载自http://www.2cto.com/kf/201204/128704.html "C#解压.zip文件,网上一搜一大堆方法,有使用System.IO.Compressi ...

  3. WordPress 主题开发 - (六) 创建主题函数 待翻译

    We’ve got a file structure in place, now let’s start adding things to them! First, we’re going to ad ...

  4. C++求1!到n!的和

    题目内容:求1!+2!+3!+4!+……+n!的结果. 输入描述:输入不多于50个正整数的数据n(1<=n<=12). 输出描述:对于每个n,输出计算结果.每个计算结果应单独占一行. 参考 ...

  5. 类似桌面背景壁纸随手指滑动--第三方开源--BackgroundViewPager

    Android BackgroundViewPager在github上的项目主页是:https://github.com/MoshDev/BackgroundViewPager 下载下来即可运行

  6. 查看SDCard是否被挂载

    获取Environment.getExternalStorageState(),然后得到的字符串进行查看 //android.os.Environment.MEDIA_MOUNTED="mo ...

  7. 删:Centos 7安装Nginx 1.8

    [CentOS 7] 安装nginx! 首先进行 nginx yum Nginx安装记录 注意:如果用源码安装,nginx配置时需要指定--with-pcer对应的压缩包路径,如果使用二进制安装不需要 ...

  8. 关于VS2012下安装破解文件Visual Assit X的一点说明

    今天在使用Visual Studio 2012的时候,编写代码的助手Visual Assit X突然提示我说,试用期已过,要求我输入一个注册码,我靠,这货不是几个月前已经破解了吗,怎么今天傻不愣登的提 ...

  9. Firbird 将可 null 的列更新为 not null

    在GOOGLE上搜到2种方法:   第一种是新加一列 C2, 然后 update myTable set C2=原字段,再删除[原字段], 但这种方法有限制,当很多其它表引到此表时,非常麻烦.   第 ...

  10. [.NET 4.5] ADO.NET / ASP.NET 使用 Async 和 Await 异步 存取数据库

    此为文章备份,原文出处(我的网站)  [.NET 4.5] ADO.NET / ASP.NET 使用 Async 和 Await 异步 存取数据库 http://www.dotblogs.com.tw ...