先整理一些零散的内容:
官方论坛有篇帖子是提问如何将 COMMUNITYSERVER 整合到已经开发的 ASP.NET 2.0 MEMBERSHIP 中。
Jose Lema(jlema):这正是 Morpheus(新的权限系统) 致力解决的场景之一,有两种选择:
1. 网站与 COMMUNITYSERVER 共用一个数据库,缺点是有点乱。
2. Morpheus 方法是让 COMMUNITYSERVER 指向其它数据库。
笔者:个人觉得努力打破 membership 和主数据库的强耦合关系主要是为了实现跨站共享用户,毕竟这种场景越来越多,象 ASP.NET 与 silverlight.net 及 windowsclient.net。
以上第二种方法需要三步:
1. 在配置文件中添加一个指向现存站点 MEMBERSHIP 数据库的连接字符串。
2. 使 MEMBERSHIP, PROFILE, AND/OR ROLE 的 PROVIDER 使用新的数据库连接字符串。
3. 执行一些存储过程使 COMMUNITYSERVER 更有效率的方法访问数据库。
第三步是必须的,因为现存 MEMBERSHIP 数据库必须存在一些新的存储过程。
最后:Morpheus 允许两个 COMMUNITYSERVER 共用一个 MEMBERSHIP,在这种情况下就不用执行以下存储过程了。
cs_Membership_GetUsersByName
cs_Membership_IsUserNameTaken
cs_Membership_RenameUser
cs_Membership_ChangePasswordAnswer
cs_Membership_ValidatePasswordAnswer
cs_Profile_GetPropertiesForUsers
cs_Role_Get
cs_Roles_CreateRole
cs_Roles_UpdateRole
cs_Roles_GetRoleIdsForUsers
cs_Roles_Get
帖子还进行了一些进一步地讨论,如果 Application name 和现存网站不一致,或者 COMMUNITYSERVER 中存在着现存网站没有的用户,就会出现异常,那么如果要升级旧的 COMMUNITYSERVER 应该怎么解决这个问题呢?还有跟帖说 Morpheus 只是共享注册数据,但是不能共享登录状态,意味着想正常使用两个站点的受限功能可能需要登录二次,如果想共享登录状态还是需要 SSO 。
在 COMMUNITYSERVER 官方文档中有关于 Morpheus 的概述,进一步的了解可以通过站内搜索或浏览 Jose CS Wiki 。
除了 Morpheus 之外,COMMUNITYSERVER 的 Single-sign on(SSO) 也是为了解决 MEMBERSHIP 整合问题。<Authentication> 和 <machineKey> 作为 ASP.NET 2.0 MEMBERSHIP 中身份验证方式的配置基础,在跨应用程序进行 Forms 身份验证中需要保持不同应用中 WEB.CONFIG 的相关配置属性一致,但我还没有对目前身份验证信息能共享的程度和能否适应单机多应用程序池情况进行测试。
题外话:关于 CommunityServer 中文名注册
虽然或许可以通过放宽正则验证的方式开通中文注册名,但是毕竟无法确定 CommunityServer 在这种情况下会出现什么问题,因为以前遇到使用中文博客随笔导致全站无法使用的情况。
所以采用折中一点的方法,使用 CommunityServer 的昵称功能,不过不知道老外的想法,昵称是可以重名的,所以如果需要在某些地方明显区分,可以通过修改某些显示控件定制显示。
相关属性:
Component.User.CommonNameOrUserName
Component.User.DisplayName
Component.User.UserName
Component.User.Profile