discuz之ucenter同步登录asp.net网站

3 篇文章 0 订阅
1 篇文章 0 订阅
      前段时间和一位群友一起探讨了discuz之ucenter同步登录问题,一下内容来自这位群友写的帖子,非常感谢他把我想做的事情做了,这里我就直接分享了偷笑希望对后面的同行带来一点小帮助,帖子提到的群友就是我哦得意


前言

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

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

文件配置

<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0"/>
    <pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID"/>
  </system.web>
  <appSettings>
    <!--客户端版本-->
    <add key="UC_CLIENT_VERSION" value="1.5.2"/>
    <!--发行时间-->
    <add key="UC_CLIENT_RELEASE" value="20101001"/>
    <!--API 开关(value类型:True False 默认值:True)-->
    <!--是否允许删除用户-->
    <add key="API_DELETEUSER" value="True"/>
    <!--是否允许重命名用户-->
    <add key="API_RENAMEUSER" value="True"/>
    <!--是否允许得到标签-->
    <add key="API_GETTAG" value="True"/>
    <!--是否允许同步登录-->
    <add key="API_SYNLOGIN" value="True"/>
    <!--是否允许同步登出-->
    <add key="API_SYNLOGOUT" value="True"/>
    <!--是否允许更改密码-->
    <add key="API_UPDATEPW" value="True"/>
    <!--是否允许更新关键字-->
    <add key="API_UPDATEBADWORDS" value="True"/>
    <!--是否允许更新域名解析缓存-->
    <add key="API_UPDATEHOSTS" value="True"/>
    <!--是否允许更新应用列表-->
    <add key="API_UPDATEAPPS" value="True"/>
    <!--是否允许更新客户端缓存-->
    <add key="API_UPDATECLIENT" value="True"/>
    <!--是否允许更新用户积分-->
    <add key="API_UPDATECREDIT" value="True"/>
    <!--是否允许向UCenter提供积分设置-->
    <add key="API_GETCREDITSETTINGS" value="True"/>
    <!--是否允许获取用户的某项积分-->
    <add key="API_GETCREDIT" value="True"/>
    <!--是否允许更新应用积分设置-->
    <add key="API_UPDATECREDITSETTINGS" value="True"/>
    <!--API 开关结束-->
    <!--返回值设置-->
    <!--返回成功(默认:1)-->
    <add key="API_RETURN_SUCCEED" value="1"/>
    <!--返回失败(默认:-1)-->
    <add key="API_RETURN_FAILED" value="-1"/>
    <!--返回禁用(默认:-2)-->
    <add key="API_RETURN_FORBIDDEN" value="-2"/>
    <!--返回值设置结束-->
    
    
    <!--[必填]通信密钥-->
    <add key="UC_KEY" value="FD144298AF7E4797A66ACC0C18C97EA3"/>
    <!--[必填]UCenter地址-->
    <add key="UC_API" value="http://localhost:8080/uc_server"/>
    <!--[必填]默认编码-->
    <add key="UC_CHARSET" value="gbk"/>
    <!--[非必填]UCenter IP-->
    <add key="UC_IP" value=""/>
    <!--[必填]应用ID-->
    <add key="UC_APPID" value="2"/>
  </appSettings>
</configuration>
这样以后,我的网站就能更UCenter交流
但是具体怎么交流?

 

 

 

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

Talk is cheap.Show you the code

public void ProcessRequest(HttpContext context)
{
    context.Response.ContentType = "text/html";
    IUcClient client = new UcClient();
    var user = client.UserLogin("us1", "111111");//登陆
    var js=client.UserSynlogin(user.Uid);//返回一个js代码,这是同步登入的关键
    if (user.Result==LoginResult.Success)
    {
        context.Response.Write(js);
        context.Response.Write(user.UserName);
    }
}
这是一段通知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
<?php
$_CACHE['apps'] = array (
  1 => 
  array (
    'appid' => '1',
    'type' => 'DISCUZX',
    'name' => 'Discuz! Board',
    'url' => 'http://localhost:8080',
    'ip' => '',
    'viewprourl' => '',
    'apifilename' => 'uc.php',
    'charset' => '',
    'dbcharset' => '',
    'synlogin' => '1',
    'recvnote' => '1',
    'extra' => false,
    'tagtemplates' => '',
    'allowips' => '',
  ),
 );
 ?>
造它的样子抄一份,注意适当得修改

<?php
$_CACHE['apps'] = array (
  1 => 
  array (
    'appid' => '1',
    'type' => 'DISCUZX',
    'name' => 'Discuz! Board',
    'url' => 'http://localhost:8080',
    'ip' => '',
    'viewprourl' => '',
    'apifilename' => 'uc.php',
    'charset' => '',
    'dbcharset' => '',
    'synlogin' => '1',
    'recvnote' => '1',
    'extra' => false,
    'tagtemplates' => '',
    'allowips' => '',
  ),
  2 =>
  array (
    'appid' => '2',
    'type' => 'OTHER',
    'name' => 'MyWebSite',
    'url' => 'http://localhost:7067',
    'ip' => '',
    'viewprourl' => '',
    'apifilename' => 'uc.ashx',
    'charset' => '',
    'dbcharset' => '',
    'synlogin' => '1',
    'recvnote' => '1',
    'extra' => false,
    'tagtemplates' => '',
    'allowips' => '',
  ),
  );
?>
问我为什么要做这个,其实我也不知道,反正如果不这样改的话,你在discuz登入时候,不会像上面一样返回一段js给你,更别说同步登入
 
这样就能同步登入了
当在discuz登入的时候,将触发你的网站的uc.asxh的 public   override  ApiReturn SynLogin( int  uid)方法
你可以在这里写你的操作
比如
















  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值