• 不争气的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,所用的方法不一定是最好的,那里写的不好的还请指正.

  • 相关阅读:
    进程间通讯(四)--剪切板
    进程间通讯(三)--套接字
    进程间通讯(二)--管道
    进程间通讯(一)--邮件槽
    获得目标进程PEB,并获得进程各种信息
    编程实现执行CMD命令-用照片查看器打开图片
    Python网页爬虫之中文乱码
    Python爬虫技术(一)--模拟登陆
    gson的特殊用法
    spring的beans.xml中classpath
  • 原文地址:https://www.cnblogs.com/Playfunny/p/2726293.html
Copyright © 2020-2023  润新知