您的位置:首页 > 编程语言 > ASP

ASP.NET系统整合DiscuzNT3.6之注意事项

2012-10-04 22:26 483 查看
  最近在做一个ASP.NET的系统,需要与Discuz整合实现双向登录、注册、修改密码这些简单的集成。

  查了一些资料,最后还是选择了官方提供的DiscuzToolkit,由于是开源的,所以用起来也方便,可以根据自己的需求做一些调整,在此也感谢DZ团队。

  第一步,当然还是将论坛安装好,调试好,一切正常。

  第二步,学习官方提供API文档,http://nt.discuz.net/showtopic-66493.aspx

  第三步,查看官方提供的示例文档,http://nt.discuz.net/showtopic-81187.aspx

  第四步,项目中引入Discuz.Toolkit.dll(可直接将开源的项目添加到项目中)在网站中增加同步登录或注册BBS帐号的方法,登录后或注册完成时,如下:

View Code

private DiscuzSession ds;
private string action = "", user_name, password;
private int uid = 0;
protected void Page_Load(object sender, EventArgs e)
{
try
{
ds = DiscuzSessionHelper.GetSession();
if (!IsPostBack)
{
action = Handler.RequestQueryString("action");
uid = Handler.RequestQueryInt("uid");
user_name = Handler.RequestQueryString("user_name");
password = Handler.RequestQueryString("password");
if (action != "" && check_sig()) //验证sig是否合法
{
switch (action)
{
case "login": //同步登录:uid,user_name,time,action 正序后 + secret(密钥) Md5后 算出sig
Login();
break;
case "logout": //同步退出
LoginOut();
break;
case "updatepwd": //同步修改密码
break;
}
}
}
}
catch (Exception ex) {
LogHelper.WriteLog(ex);
}
}

/// <summary>
/// 登录
/// </summary>
private void Login() {
Discuz.Toolkit.User user= ds.GetUserInfo(uid);
if (user != null)
MemberOp.ValidateLogin(user.UserName, user.Password, true);
}
/// <summary>
/// 退出
/// </summary>
private void LoginOut()
{
MemberOp.LoginOut(false);
}


 以上check_sig()方法里,主要就是验证sig是否正确,这个值是通过参数排序后md5出来的,具体过程可以参考方法:Discuz.Forum.Sync.GetUrl()。

  注意密钥apikey、secret、url这几个值一定要配置正确。至此已实现论坛到网站的同步登录和退出。


DiscuzToolkit线程同步,相信这两个问题肯定会碰到:

(1)在注册用户时,碰到以下异常:当前会话所提交的call_id没有大于前一次的call_id

(2)注册用户时,碰到以下异常:An item with the same key has already been added.

解决办法:/article/4793443.html


解决方案中,有一处线程锁的问题:

lock (_syncRoot) 可直接用 lock (this)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: