宝玉的blog

专注于web开发技术
随笔 - 81, 评论 - 1563, 引用 - 157

导航

关于


目前致力于ChinaCommunityServer的开发。

msn: junminliu(at)msn.com

标签

每月存档

最新留言

  • re:发布一个爱心小软件——网页抓图
    <p>你好 我看了你的代码 不错啊,请问在asp.net C#中 没有了webbrowser 该怎么实现?</p> <p><a href="http...
    by weblogical(注册) on 2009/9/9 17:22:55
  • re:Openlab V2.0 Beta
    <p>宝玉你好: &nbsp; &nbsp; &nbsp; 我是个.net新手,最近看了openlab(openlab_V2.0_Beta)的源码。 ...
    by isforge(注册) on 2009/6/28 10:10:37
  • re:Openlab V2.0 Beta
    <p>宝玉你好: &nbsp; &nbsp; &nbsp; 我是个.net新手,最近看了openlab(openlab_V2.0_Beta)的源码。 ...
    by isforge(注册) on 2009/6/28 10:10:31
  • re:Openlab V2.0 Beta
    <p>宝玉你好: &nbsp; &nbsp; &nbsp; 我是个.net新手,最近看了openlab(openlab_V2.0_Beta)的源码。 ...
    by isforge(注册) on 2009/6/28 10:10:30
  • re:Openlab V2.0 Beta
    <p>宝玉你好: &nbsp; &nbsp; &nbsp; 我是个.net新手,最近看了openlab(openlab_V2.0_Beta)的源码。 ...
    by isforge(注册) on 2009/6/28 10:10:29
  • re:Openlab V2.0 Beta
    <p>宝玉你好: &nbsp; &nbsp; &nbsp; 我是个.net新手,最近看了openlab(openlab_V2.0_Beta)的源码。 ...
    by isforge(注册) on 2009/6/28 10:10:25
  • re:Openlab V2.0 Beta
    <p>宝玉你好: &nbsp; &nbsp; &nbsp; 我是个.net新手,最近看了openlab(openlab_V2.0_Beta)的源码。 ...
    by isforge(注册) on 2009/6/28 10:10:25
  • re:Openlab V2.0 Beta
    <p>宝玉你好: &nbsp; &nbsp; &nbsp; 我是个.net新手,最近看了openlab(openlab_V2.0_Beta)的源码。 ...
    by isforge(注册) on 2009/6/28 10:10:25
  • re:Openlab V2.0 Beta
    <p>宝玉你好: &nbsp; &nbsp; &nbsp; 我是个.net新手,最近看了openlab(openlab_V2.0_Beta)的源码。 ...
    by isforge(注册) on 2009/6/28 10:10:25
  • re:Silverlight中,防止ComboBox抢焦点
    <p>我是初学者,您已经写了一个 组件上传的功能 。。我在2008下测试通过,,,但是弄2005测试的时候 发现 progress.aspx.cs页面的</p> <p&...
    by jxh12345j(注册) on 2009/4/7 8:55:12
  • ufnnutdh - Google Search
    ufnnutdh - Google Search
    by (匿名) on 2008/10/27 17:44:45
  • veysaync - Google Search
    veysaync - Google Search
    by (匿名) on 2008/10/5 5:20:49
  • mzgmhgio - Google Search
    mzgmhgio - Google Search
    by (匿名) on 2008/9/22 23:34:49
  • rhmhnyma - Google Search
    rhmhnyma - Google Search
    by (匿名) on 2008/9/22 7:48:44
  • re: 发布一个爱心小软件——网页抓图
    Maxthon应该有这个功能
    by passos(匿名) on 2008/7/21 20:05:23

广告

 
可能我们已经有了一个完整的系统,已经有了一套用户系统,而需要加上论坛,也就是和CnForums整合,希望能共享验证,共享用户资料。可能有很多种方案,以我以前写过的一套解决方案为例,说明一下思路和具体实现过程,抛砖引玉:

先说说用户共享,最理想的做法是共享一个用户库,而一般都不太方便,所以最简单有效的方法就是保证两个用户库的同步,也就是以前系统的用户表数据在CnForums的表数据有一份拷贝,所有系统的注册/修改资料/登录在同一个入口,修改资料则同步修改,注册用户则同步插入。要注意CnForums中数据表有2个:forums_Users、forums_UserProfile ,以UserID关联,在同步用户数据的时候,最好直接使用CnForums现有的注册/修改资料的存储过程forums_User_CreateUpdateDelete,或者参考其实现。(特别注意一下,如果你想密码也同步,就要注意@PasswordFormat参数,如果以前系统的密码没有加密,那么该参数的值就设置为0,否则就设置一个10以后的数字)
具体实现就是将CnForums的所有表和存储过程安装在原来的数据库上,因为CnForums的所有存储过程和表都是forums_开头,所以很容易区分。用SQL调用CnForums的forums_User_CreateUpdateDelete存储过程或参考其实现,写个SQL或者导入程序把以前系统的用户数据导入到CnForums的用户表中,修改 修改资料和注册的程序,保证两个地方用户数据的同步。

用户同步后,就是共享登录验证,共享登录验证有两种方案,一种就是保证密码同步、另一种就是只采用一个系统的登录验证。
先说说第一种,CnForums可以支持多种密码验证方案,如果你以前密码没有加密,那么什么都不用改,只要注意在同步用户的时候用户资料的PasswordFormat字段为0。如果是自己的加密方式,那么就要修改一下CnForums的相关源码,在AspNetForums.Enumerations.UserPasswordFormat中增加枚举,枚举的数值和同步用户数据时@PasswordFormat参数参数的值一致,这就是为什么让你设置一个10以上的数字了。再在AspNetForums.Users.public static string Encrypt(UserPasswordFormat format, string cleanString, string salt)方法中增加您原来系统的加密算法。
如果您嫌第一种复杂,那么就可以采用第二种,共用一个登录验证,CnForums使用的是asp.net的Forms验证,在登录成功授权的时候,记录登录的用户名(username)(祥见AspNetForums.Controls中的Login.cs:FormsAuthentication.SetAuthCookie(userToLogin.Username, autoLogin.Checked)Wink,以后每次获取用户资料都是根据这个登录用户名来取用户资料(具体参考AspNetForums.Users.GetUser()、AspNetForums.Users.GetLoggedOnUsername()和AspNetForums.ForumsHttpModule.Application_AuthenticateRequest(Object source, EventArgs e)方法,ForumContext.Current.UserName = context.User.Identity.Name;),所以我们如果要让CnForums共享主系统的登录验证,可以在主系统登录成功后,也记录当前登录的Username,也就是Login.cs中的FormsAuthentication.SetAuthCookie(userToLogin.Username, autoLogin.Checked),在CnForums中,只要表中有当前登录的这个用户,就会认为当前这个用户是登录过的(在CnForums的HttpModule里面,如果当前登录的Username在表中没记录,则会自动注销,所以一定要保持用户表的同步)。还有要注意就是Forms验证不能跨域,所以就要让CnForums免虚拟目录安装,具体方法可搜索以前的帖子。
第二种方案的具体实现:
免虚拟目录安装好CnForums;
在主系统的登录程序中,密码校验成功后,使用FormsAuthentication.SetAuthCookie(username, autoLogin)方法设置登录成功,这样,当主系统登录后,CnForums就也是成功登录的。

打印 | 张贴于 2005-05-31 00:05:00 | Tag:CnForums

留言反馈

#回复: CnForums和已有系统的整合方案 编辑
非常不错,收藏。
2007-01-03 11:58:00 | [匿名:虫子]
#re: CnForums和已有系统的整合方案 编辑
总感觉这种验证方式很难受~~
2005-08-15 16:18:00 | [匿名:zydar]
#re:CnForums和已有系统的整合方案 编辑
CnForums和已有系统的整合方案ooeess
2005-06-15 22:56:00 | [匿名:一氧化碳测定仪]
#re: CnForums和已有系统的整合方案 编辑
明白一点点,但我下不了手:(
2005-06-13 15:40:00 | [匿名:xiaoii]
#re: CnForums和已有系统的整合方案 编辑
偶现在的整合差不多和宝玉一样的方法,只是利用第二种整合有些地方还是不方便的
2005-06-08 14:28:00 | [匿名:ApexChu]
#re: CnForums和已有系统的整合方案 编辑
CommunityServer 1.1 预览版本已经发布了。
界面中文化容易跟上。类似cnForums的汉化方式就不好办了..
2005-06-02 00:51:00 | [匿名:bighippo]
#re: CnForums和已有系统的整合方案 编辑
关于集成方面我也有不少的心得 最近正在用集成作应用~~希望以后有机会交流一下~
2005-06-01 23:27:00 | [匿名:提提]
#re: CnForums和已有系统的整合方案 编辑
请具体一点说明,以前没有接触过State Server.
另:CnForums该网站 站点下的一个虚拟目录。
2005-06-01 21:49:00 | [匿名:CoolBug]
#state server 编辑
state server
2005-06-01 14:59:00 | [匿名:microshaoft]
#re: CnForums和已有系统的整合方案 编辑
请教一下宝玉:整合后,在CnForums里注销后,如何在网站也注销?Session能否传得过来(在两个应用程序里)?
我的网站是用Session传值的,而在CnForums是通过SetCookie设置的。
2005-06-01 13:34:00 | [匿名:CoolBug]
#re: CnForums和已有系统的整合方案 编辑
呵呵,支持,你的博客一篇文章偶也不懂,向你学习哦
2005-05-31 10:31:00 | [匿名:蛙蛙]
对不起,目前本随笔不允许发表新评论.

Powered by: Joycode.MVC引擎 0.5.2.0