Discuz!NT

注册

 

QQ登录

只需一步,快速开始

发新话题 回复该主题

最简整合dnt 3.0(注册,登录,改密码)详细攻略 [复制链接]

1#
最简整合dnt 3.0(注册,登录,改密码)详细攻略

刚刚整合好自己的网站和论坛。最初本来打算用官方的API来整合,但是目前接口还不是很清楚,用起来很不方便。等不及官方更新API了,所以干脆直接从dnt源码中寻找函数,然后封装到一个项目里面。
大概测试了一下,可以用,但还没有经过严格测试。有兴趣的朋友可以自己调试,测试,并分享使用经验。
注意数据库操作用的是linq to sql,如果感觉使用不方便,可以根据自己情况使用ADO.NET或自己的数据库类。

整合使用说明

1 适用条件
适用于dnt3.0。
网站和论坛部署在同一个服务器,网站在根目录,论坛在虚拟目录。即网站和论坛在同一个域。
不适用于跨域整合。
数据库表前缀选择缺省:dnt_。如果更改了前缀,需要在代码中做出相应修改。

2 原理
所用整合功能函数都从dnt3.0源码中提取。
同步登录其实就是共享cookie,所以要求在同一个域。
数据库操作使用了LINQ to SQL,所以最好不要修改缺省表前缀。

3 步骤
3.1注册
在网站注册页调用DntUserHelper.Register()函数。如果注册成功返回新用户ID,否则返回-1。失败可以从out参数中查看原因字符串。

3.2登录
在网站登录页首先调用DntUserHelper.AuthenticateUser()函数验证用户名和密码。
如果通过验证,调用DntUserHelper.Login()函数写cookie。

3.3退出
调用DntUserHelper.Logout()函数清cookie。

3.4检测用户登录状态
查看DntUserHelper.IsLoggedIn属性得到用户状态。
查看DntUserHelper.CurrentUsername属性得到当前用户名。

3.5修改密码
在网站修改密码页调用DntUserHelper.ChangePassword()函数,失败返回原因字符串。

3.6替换passwordkey
注意DntUserHelper类第一行
        const string passwordkey = "NXT2824F8F";
需要替换为你的论坛的passwordkey。
在config目录中的general.config文件中,搜索passwordkey字段。



项目文件在附件里,包含一个简单的应用示例。建议在本地进行测试调试,在sql server 建一个新的用户discuz,密码discuz,该用户设置为dnt3数据库的所有者。这样就不用更改数据库连接字符串了。
限于技术水平,不到之处请多批评指正。
欢迎大家试用,就不设置隐藏了,怪麻烦的,有问题请留言。
dntintesample.rar (, 下载次数:627)

rar(2009/8/31 18:51:30 上传)

最后编辑erichan 最后编辑于 2009-08-31 18:51:30
分享 转发
TOP
2#

cookie.Values["password"] = HttpUtility.UrlEncode(DntUtil.Encode(user.password, passwordkey));


DntUtil这个命名空间是在哪里的?找不到,加密不了
TOP
3#

回复 2# liangcaijia 的帖子

在Util.cs 文件里。DntUtil不是命名空间,是一个公共类,用于封装整合过程中需要的公共函数。
项目里没有任何没有公布的类,完全可以根据自己的需要修改和扩展。
由于时间仓促,没有考虑更多应用的友好性。有时间会根据大家反馈更新,争取使整合的工作量降到最低。
TOP
4#

不行
      byte[] Keys = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };
这个不对
TOP
5#

有没有人知道怎查自己的论坛这个公钥是多少的?
TOP
6#

终于搞定...好像是那个general.config文件中passwordkey会动态改变的....不知是不是,最近才发觉自己的key根本同那里的不同...好感激楼主ift:
TOP
7#

原帖由 liangcaijia 于 2009/8/31 23:04:00 发表
终于搞定...好像是那个general.config文件中passwordkey会动态改变的....不知是不是,最近才发觉自己的key根本同那里的不同...好感激楼主ift:


不用客气。我猜测general.config文件中passwordkey是在你安装论坛的时候随机生成的,所以每个安装的论坛的passwordkey都是唯一的,这样可以提高cookie中密码的安全性。一旦安装完毕,passwordkey应该是不会改变的。不过具体需要向官方求证,或者从源代码中找答案。
TOP
8#

原帖由 liangcaijia 于 2009/8/31 21:29:00 发表
不行
      byte[] Keys = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };
这个不对


这个Keys 是从官方代码中copy过来的,绝对没有问题。因为是在源码里面,每个论坛的值都是一样的。
最后编辑erichan 最后编辑于 2009-09-01 05:25:01
TOP
9#

楼主能否详细说明一下,数据库用aspnetdb是什么修改做的
TOP
10#

原帖由 tanwen 于 2009/9/2 11:41:00 发表
楼主能否详细说明一下,数据库用aspnetdb是什么修改做的


我用的是Linq to Sql class。如果熟悉Linq的话,应该知道linq操作数据库相当方便,比传统的ado.net要快捷方便好多,很适合小型项目的开发。对于大型复杂项目同样适用。微软推出两个Linq操作数据库类:linq to sql class和ado.net entity data model,后者适用于大型复杂项目开发。

如果不喜欢linq的话,也可以用ado.net或者你熟悉的方式来替换linq实现的函数,效果是一样的。为了赶时间,我没有用官方的dbhelper类。如果需要,我可以做一版ado.net的演示。
TOP
发新话题 回复该主题
站长