最近在一个小站中整合了Discuz论坛,查阅了些资料后实现了同步注册和单点登录。

Discuz是以虚拟目录的方式加载网站中,整合Discuz到网站中进行安装要注意一下几个问题:

  • Discuz所在的目录需要添加NETWORK SERVICE 和IIS_User这两个账户的权限。
  • Discuz根目录下的DNT.config文件需要修改,将<Forumpath>/</Forumpath>修改为<Forumpath>/BBS/</Forumpath>,BBS为虚拟目录的名称。
  • 由于我网站用了第三方的控件,在webconfig文件中进行了相关设置,然后在访问论坛时提示缺少程序集的引用,后来把第三方控件的dll加到Discuz下的bin目录中得以解决。

下面说说怎样实现同步注册和单点登录

其实在研究后发现很简单,当然我现在做的只是同域的情况下,跨域的情况还没研究,估计也不会很难,应该只是多了一个设置cookieDomain的过程。Discuz给我们提供了一个DiscuzToolkit的工具包,提供了很多API供调用,下面就一步步来吧。

1 安装好Discuz论坛后,进入后台管理,选择扩展-》通行证设置-》添加整合程序设置

  • 应用程序名称:可以随便输入
  • 应用程序Url地址:我填写的是我站点的地址
  • 登录完成后返回地址:同上

2 记下生成的APIKey和密匙,在后面的代码编写中会用到

3 我将APIKey,密匙都配置在了webconfig文件中

  • APIKey:value值为后台生成的APIKey
  • Secret:value值为后台生成的密匙
  • Url:value值为BBS的路径

4 写一个公共的BBSHelper类,将添加用户,登录,改密码等方法封装在里面。注意要引用命名空间Discuz.Toolkit

 
  
  1. /// <summary> 
  2. /// 同步Discuz论坛帮助类  
  3. /// </summary> 
  4. public class DiscuzBBSHelper  
  5. {  
  6.     private string _apiKey = string.Empty;  
  7.     private string _secret = string.Empty;  
  8.     private string _url = string.Empty;  
  9.     DiscuzSession _ds;  
  10.  
  11.     public DiscuzBBSHelper()  
  12.     {  
  13.         _apiKey = ConfigHelper.APIKey();  
  14.         _secret = ConfigHelper.Secret();  
  15.         _url = ConfigHelper.Url();  
  16.         _ds = new DiscuzSession(_apiKey, _secret, _url);  
  17.     }  
  18.  
  19.     /// <summary> 
  20.     /// 登录  
  21.     /// </summary> 
  22.     public void Login(string userName,string pwd)  
  23.     {  
  24.         int uid = _ds.GetUserID(userName);  
  25.         _ds.Login(uid, pwd, false, 100, "");  
  26.     }  
  27.  
  28.     /// <summary> 
  29.     /// 登出  
  30.     /// </summary> 
  31.     public void Logout()  
  32.     {  
  33.         _ds.Logout("");  
  34.         _ds.session_info = null;  
  35.         HttpContext.Current.Session["AuthToken"] = null;  
  36.     }  
  37.  
  38.     /// <summary> 
  39.     /// 创建用户  
  40.     /// </summary> 
  41.     public void AddUser(string userName,string pwd)  
  42.     {  
  43.         _ds.Register(userName, pwd, "", false);  
  44.     }  
  45.  
  46.     /// <summary> 
  47.     /// 修改密码  
  48.     /// </summary> 
  49.     public void ChangePWD(string userName,string oldPWD,string newPWD)  
  50.     {  
  51.         int uid = _ds.GetUserID(userName);  
  52.         _ds.ChangeUserPassword(uid, oldPWD, newPWD, newPWD, "");  
  53.     }  

5 在网站需要的地方调用该类中的方法即可,如下:

 
  
  1. //同步论坛  
  2. DiscuzBBSHelper bbs = new DiscuzBBSHelper();  
  3. bbs.Login(username, pwd);