不争气的Discuz!NT 3.6和MVC3整合,主要实现同步登录和注册,登出。
由于主站采用的用户系统是微软内置的Membership类。所以密码这块就不能够实现统一。不过这并不影响,因为dz论坛在后台的“扩展”--》"整合设置"已经给我提供了相关“服务”。
首先把论坛程序放在主站的一个bbs文件夹里面(论坛是以虚拟目录的形式安装的)。然后在iis里面找到主站,新建虚拟目录。选择对于的bbs文件夹即可。dz论坛的安装可参照。http://faq.comsenz.com/viewnews-989
dnt配置文件修改好数据库链接和论坛地址之后,还要把论坛的bll复制到主站的bin里面。网站安装好之后如果首页是空白的,可以进入后台。这时要修改DNT.config文件
<Forumpath>/</Forumpath>为<Forumpath>/虚拟目录名称/</Forumpath>。
这样整个论坛的搭建就已经完成了。接着就开始整合了。
1.首先进入管理后台-》扩展=》整合设置,开启论坛整合
2.在主站的app_code新建一个类:DiscuzToolkitUtil,注意添加discuztoolkit的引用:using Discuz.Toolkit;
public static class DiscuzToolkitUtil
{
public static string api_key,secret_key,webserver;
private static bool IsInitObject = false;
public static DiscuzSession ds;
static DiscuzToolkitUtil()
{
if (!IsInitObject)
{
api_key = ConfigurationManager.AppSettings["DNTAPIKey"];
secret_key = ConfigurationManager.AppSettings["DNTSecert"];
webserver = ConfigurationManager.AppSettings["DNTWebServer"];
ds = new DiscuzSession(api_key, secret_key, webserver);
IsInitObject = true;
}
}
public static DiscuzSession InitDiscuzSession()
{
return ds;
}
}
3.添加web.config中的配置:
<!--DNTAPI码-->
<add key="DNTAPIKey" value="9b96f217f65f510f647a97c47934659e" />
<!--DNT密钥-->
<add key="DNTSecert" value="bc9a7df4dbe407d089a07bd551125b1e" />
<!--DNT服务器API地址-->
<add key="DNTWebServer" value="http://localhost:8014/bbs/" />//这个地址其实就是论坛的地址
4.开始做上面配置的那个async_receiver.aspx,这个是论坛登录或注册之后,发送消息给主站,让主网站也登录或注册
在自己的 网站项目中新建一个webform:async_receiver.aspx这个也要添加引用:using Discuz.Toolkit;
并加入如下代码:
DiscuzSession ds;
//dkcms2.Models. = new User();//自己网站的用户逻辑类
protected void Page_Load(object sender, EventArgs e)
{
#region 论坛注册 这里的action一共有三种值 register ,login,logout,代表注册,登录和退出
if (Request.QueryString["action"] != null)
{
//bool zhangtai = false;
string user_roel = "";
//通知注册 这里的注册暂时不能实现,因为传过来的密码是md5加密过的,dz未提供解码的方法,所以我的做法是论坛的注册页面和主站用一个页面。
if (Request.QueryString["action"].ToString() == "register")
{
if (Request.QueryString["user_name"] != null && Request.QueryString["user_name"].Trim() != "" && Request.QueryString["password"] != null && Request.QueryString["password"].Trim() != "")
{
RegisterModel modelR = new RegisterModel();
modelR.UserName = Request.QueryString["user_name"];
int useridsf = Discuz.Forum.Users.GetUserId(modelR.UserName);
// Discuz.Toolkit.User dnt_user = ds.GetUserInfo(useridsf);
modelR.Password = Request.QueryString["password"];
//modelR.Password=dnt_user.Password;
modelR.Email = Request.QueryString["email"];
MembershipCreateStatus createStatus;
MembershipUser user = Membership.CreateUser(Request.QueryString["user_name"], modelR.Password, modelR.Email, null, null, true, null, out createStatus);
//Request["roels"]="";
if (createStatus == MembershipCreateStatus.Success)
{
//自己的用户注册代码
Roles.AddUserToRole(modelR.UserName, user_roel);
}
}
}
#endregion
//登录
//通知登录
if (Request.QueryString["action"].Trim() == "login")
{
if (Request.QueryString["user_name"] != null && Request.QueryString["user_name"].Trim() != "" && Request.QueryString["uid"] != null && Request.QueryString["uid"].Trim() != "")
{
int dnt_userid = Convert.ToInt32(Request.QueryString["uid"]);//dnt论坛数据库的用户id
//Discuz.Toolkit.User dnt_user = ds.GetUserInfo(dnt_userid);//dnt论坛数据库的用户信息
string username=Request.QueryString["user_name"].Trim();
//主站用户登录代码
FormsAuthentication.SetAuthCookie(username, false);
}
}
//退出
if (Request.QueryString["action"].Trim() == "logout")
{
FormsAuthentication.SignOut();
}
}
}
5.以上只是论坛的登录和注册,退出的时候主站同步登录,注册,退出,反之的实现方法。
//以下是dnt登录
DiscuzSession ds = DiscuzToolkitUtil.InitDiscuzSession();
int dnt_uid = ds.GetUserID(model.Account);
ds.Login(dnt_uid, password, true, 30, "");
//以下是discuz注册
int discuz_uid = 0;
DiscuzSession ds = DiscuzToolkitUtil.InitDiscuzSession();
try
{
discuz_uid = ds.Register(model.Account, model.Password, model.Email, true);//注册成功后返回discuz论坛的用户ID
}
catch (DiscuzException d)
{
if (d.ErrorCode == 109)//109是论坛设置了不允许注册,具体的可以看官方api文档,或者直接看下载的那个discuztoolkit源码
{
Response.Write("alert('" + d.ErrorMessage + "');history.back();");
Response.End();
}
}
if (discuz_uid == 0)
{
Response.Write("alert('注册失败');history.back();");
Response.End();
}
//等dnt论坛注册成功后,下面是自己网站的注册
//自己网站的注册代码
这样就简单的实现用户同步注册和登录 ,退出了。
由于是初次整合dz,所用的方法不一定是最好的,那里写的不好的还请指正.