打通Discuz!NT类(VS2005)

本文介绍了一个论坛用户同步管理系统,该系统能够实现用户自动注册、前台和后台管理员的同步登录及退出等功能。它还支持密码同步更新,并详细展示了如何通过代码实现这些功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

主要功能如下:

1、自动论坛注册

2、前台用户同步登陆,并同步密码

3、前台用户同步退出

4、后台管理员同步登陆

5、后台管理员同步退出


注意:
本程序用到的password均为主用户表的MD5加密密码
将论坛登陆和退出改成自己平台登陆和登出

 

 

 

using System;
using System.IO;
using System.Text;
using System.Web.SessionState;
using System.Web;
using System.Web.UI;
using System.Data;

using Discuz.Common;
using Discuz.Forum;
using Discuz.Config;
using Discuz.Data;
using Discuz.Entity;
using Discuz.Web.UI.Pages;


namespace Discuz_NT.combine
{
 /// <summary>
 /// by wolfgreen 2008.09.5 九核技术网 www.9core.com
 /// </summary>
 public class DcUsers : BasePage
 {
  protected Page page;

  public int userRegister(string m_userName,string m_password,string m_email)
  {
   UserInfo userinfo = new UserInfo();
   userinfo.Username = m_userName;
   userinfo.Nickname = Utils.HtmlEncode(DNTRequest.GetString("nickname"));
   userinfo.Password = m_password;//Utils.MD5(m_password);
   userinfo.Secques = ForumUtils.GetUserSecques(DNTRequest.GetInt("question", 0), DNTRequest.GetString("answer"));
   userinfo.Gender = DNTRequest.GetInt("gender", 0);
   userinfo.Adminid = 0;
   userinfo.Groupexpiry = 0;
   userinfo.Extgroupids = "";
   userinfo.Regip = DNTRequest.GetIP();
   userinfo.Joindate = Utils.GetDateTime();
   userinfo.Lastip = DNTRequest.GetIP();
   userinfo.Lastvisit = Utils.GetDateTime();
   userinfo.Lastactivity = Utils.GetDateTime();
   userinfo.Lastpost = Utils.GetDateTime();
   userinfo.Lastpostid = 0;
   userinfo.Lastposttitle = "";
   userinfo.Posts = 0;
   userinfo.Digestposts = 0;
   userinfo.Oltime = 0;
   userinfo.Pageviews = 0;
   userinfo.Credits = 0;
   userinfo.Extcredits1 = Scoresets.GetScoreSet(1).Init;
   userinfo.Extcredits2 = Scoresets.GetScoreSet(2).Init;
   userinfo.Extcredits3 = Scoresets.GetScoreSet(3).Init;
   userinfo.Extcredits4 = Scoresets.GetScoreSet(4).Init;
   userinfo.Extcredits5 = Scoresets.GetScoreSet(5).Init;
   userinfo.Extcredits6 = Scoresets.GetScoreSet(6).Init;
   userinfo.Extcredits7 = Scoresets.GetScoreSet(7).Init;
   userinfo.Extcredits8 = Scoresets.GetScoreSet(8).Init;
   userinfo.Avatarshowid = 0;
   userinfo.Email = m_email;
   userinfo.Bday = "";
   userinfo.Sigstatus = DNTRequest.GetInt("sigstatus", 0);

   if (userinfo.Sigstatus != 0)
   {
    userinfo.Sigstatus = 1;
   }
   userinfo.Tpp = DNTRequest.GetInt("tpp", 0);
   userinfo.Ppp = DNTRequest.GetInt("ppp", 0);
   userinfo.Templateid = DNTRequest.GetInt("templateid", 1);
   userinfo.Pmsound = DNTRequest.GetInt("pmsound", 0);
   userinfo.Showemail = DNTRequest.GetInt("showemail", 0);

   int receivepmsetting = 1;
   foreach (string rpms in DNTRequest.GetString("receivesetting").Split(','))
   {
    if (rpms != string.Empty)
    {
     int tmp = int.Parse(rpms);
     receivepmsetting = receivepmsetting | tmp;
    }
   }

   if (config.Regadvance == 0)
   {
    receivepmsetting = 7;
   }

   userinfo.Newsletter = (ReceivePMSettingType)receivepmsetting;
   userinfo.Invisible = DNTRequest.GetInt("invisible", 0);
   userinfo.Newpm = 0;
   userinfo.Medals = "";
   if (config.Welcomemsg == 1)
   {
    userinfo.Newpm = 1;
   }
   userinfo.Accessmasks = DNTRequest.GetInt("accessmasks", 0);
   userinfo.Website = Utils.HtmlEncode(DNTRequest.GetString("website"));
   userinfo.Icq = Utils.HtmlEncode(DNTRequest.GetString("icq"));
   userinfo.Qq = Utils.HtmlEncode(DNTRequest.GetString("qq"));
   userinfo.Yahoo = Utils.HtmlEncode(DNTRequest.GetString("yahoo"));
   userinfo.Msn = Utils.HtmlEncode(DNTRequest.GetString("msn"));
   userinfo.Skype = Utils.HtmlEncode(DNTRequest.GetString("skype"));
   userinfo.Location = Utils.HtmlEncode(DNTRequest.GetString("location"));
   if (usergroupinfo.Allowcstatus == 1)
   {
    userinfo.Customstatus = Utils.HtmlEncode(DNTRequest.GetString("customstatus"));
   }
   else
   {
    userinfo.Customstatus = "";
   }
   userinfo.Avatar = @"avatars/common/0.gif";
   userinfo.Avatarwidth = 0;
   userinfo.Avatarheight = 0;
   userinfo.Bio = DNTRequest.GetString("bio");
   userinfo.Signature = Utils.HtmlEncode(ForumUtils.BanWordFilter(DNTRequest.GetString("signature")));

   PostpramsInfo postpramsinfo = new PostpramsInfo();
   postpramsinfo.Usergroupid = usergroupid;
   postpramsinfo.Attachimgpost = config.Attachimgpost;
   postpramsinfo.Showattachmentpath = config.Showattachmentpath;
   postpramsinfo.Hide = 0;
   postpramsinfo.Price = 0;
   postpramsinfo.Sdetail = userinfo.Signature;
   postpramsinfo.Smileyoff = 1;
   postpramsinfo.Bbcodeoff = 1 - usergroupinfo.Allowsigbbcode;
   postpramsinfo.Parseurloff = 1;
   postpramsinfo.Showimages = usergroupinfo.Allowsigimgcode;
   postpramsinfo.Allowhtml = 0;
   postpramsinfo.Smiliesinfo = Smilies.GetSmiliesListWithInfo();
   postpramsinfo.Customeditorbuttoninfo = Editors.GetCustomEditButtonListWithInfo();
   postpramsinfo.Smiliesmax = config.Smiliesmax;

   userinfo.Sightml = UBB.UBBToHTML(postpramsinfo);

   //
   userinfo.Authtime = Utils.GetDateTime();

   
   userinfo.Authstr = "";
   userinfo.Authflag = 0;
   userinfo.Groupid = UserCredits.GetCreditsUserGroupID(0).Groupid;
  
   userinfo.Realname = DNTRequest.GetString("realname");
   userinfo.Idcard = DNTRequest.GetString("idcard");
   userinfo.Mobile = DNTRequest.GetString("mobile");
   userinfo.Phone = DNTRequest.GetString("phone");

   return  Users.CreateUser(userinfo);

  }

  public bool Login(string m_userName, string m_password,string m_mail)
  {
   if(m_userName.Trim() == "")
   {
    return false;
   }
   
   int uid = Discuz.Forum.Users.GetUserID(m_userName);
   if(uid<=0)
   {
    //注册一下
    uid  = this.userRegister(m_userName,m_password,m_mail);
    
   }
   if(uid > 0)
   {
                //修改密码
                if (ModifyPwd(uid, m_password))
                {
                    //设置cookie
                    setBBSCookie(uid);
                    return true;
                }
                else
                {
                    return false;
                }
   }
   else
   {
    return false;
   }
  }

  private void setBBSCookie(int m_uid)
  {
   Discuz.Forum.UserCredits.UpdateUserCredits(m_uid);
   Discuz.Forum.ForumUtils.WriteUserCookie(
    m_uid,
    Utils.StrToInt(DNTRequest.GetString("expires"), -1),
    config.Passwordkey,
    DNTRequest.GetInt("templateid", 0),
    DNTRequest.GetInt("loginmode", -1));
  
   Discuz.Forum.Users.UpdateUserLastvisit(m_uid, DNTRequest.GetIP());
  }

        /// <summary>
        /// 修改用户密码
        /// </summary>
        /// <param name="uid">论坛用户ID</param>
        /// <param name="m_password">MD5加密好的密码</param>
        /// <returns></returns>
        public bool ModifyPwd(int uid, string m_password)
        {
            //<param name="originalpassword">是否非MD5密码</param>
            return Users.UpdateUserPassword(uid, m_password, false);
        }

  public bool ModifyPwd(string m_userName,string m_newpassword)
  {
   if(m_userName.Trim() == "")
   {
    return false;
   }

   int uid = Discuz.Forum.Users.GetUserID(m_userName);
   if(uid > 0 )
   {

                return ModifyPwd(uid, m_newpassword);
   }
   else
   {
    return false;
   }
  }

        /// <summary>
        /// 用户登出
        /// </summary>
        /// <param name="m_userName"></param>
  public void LoginOut(string m_userName)
  {
   int uid = Discuz.Forum.Users.GetUserID(m_userName);
   if(uid>=1)
   {
    Users.UpdateOnlineTime(uid);
    OnlineUsers.DeleteRows(olid);
    ForumUtils.ClearUserCookie();
    Utils.WriteCookie(Utils.GetTemplateCookieName(), "", -999999);
   }
  }

        public void LoginOutAdmin(string m_userName)
        {
            LoginOut(m_userName);
            //去后台登陆cookie
            HttpCookie cookie = HttpContext.Current.Request.Cookies["dntadmin"];
            cookie.Values["key"] =  "";
            cookie.Expires = DateTime.Now.AddDays(-10);
            HttpContext.Current.Response.AppendCookie(cookie);
            HttpContext.Current.Response.Cookies.Clear();
        }

        public string LoginAdmin(string m_userName, string m_password, string m_mail)
        {
            bool isloginFront = Login(m_userName, m_password,m_mail);
            int m_userid = Discuz.Forum.Users.GetUserID(m_userName);
            try
            {
                if (isloginFront && m_userid > 0)
                {
                    //后台admin
              

                    DataTable dt = new DataTable();

                    /*
                    if (config.Passwordmode == 1)
                    {
                        int uid = Users.CheckDvBbsPassword(DNTRequest.GetString("username"), DNTRequest.GetString("password"));

                        dt = DatabaseProvider.GetInstance().GetUserInfo(uid);
                    }
                    else
                    {
                     * */

                    dt = DatabaseProvider.GetInstance().GetUserInfo(m_userid);
                    //}


                    if (dt.Rows.Count > 0)
                    {
                        UserGroupInfo usergroupinfo = AdminUserGroups.AdminGetUserGroupInfo(Convert.ToInt32(dt.Rows[0]["groupid"].ToString()));

                        if (usergroupinfo.Radminid == 1)
                        {
                            ForumUtils.WriteUserCookie(Convert.ToInt32(dt.Rows[0]["uid"].ToString().Trim()), 1440, GeneralConfigs.GetConfig().Passwordkey);

                            int userid = Convert.ToInt32(dt.Rows[0]["uid"].ToString().Trim());
                            string username = m_userName;
                            int usergroupid = Convert.ToInt16(dt.Rows[0]["groupid"].ToString().Trim());
                            string secques = dt.Rows[0]["secques"].ToString().Trim();
                            string ip = DNTRequest.GetIP();

                            UserGroupInfo __usergroupinfo = AdminUserGroups.AdminGetUserGroupInfo(usergroupid);

                            string grouptitle = __usergroupinfo.Grouptitle;


                            HttpCookie cookie = new HttpCookie("dntadmin");
                            cookie.Values["key"] = ForumUtils.SetCookiePassword(m_password + secques + userid.ToString(), config.Passwordkey);
                            cookie.Expires = DateTime.Now.AddMinutes(30);
                            HttpContext.Current.Response.AppendCookie(cookie);
                           
                            AdminVistLogs.InsertLog(userid, username, usergroupid, grouptitle, ip, "后台管理员登陆", "");

                            try
                            {
                                SoftInfo.LoadSoftInfo();
                            }
                            catch
                            {
                                ;
                            }

                            //升级general.config文件
                            try
                            {
                                GeneralConfigs.Serialiaze(GeneralConfigs.GetConfig(), Server.MapPath("../config/general.config"));
                            }
                            catch { }

 

                            return "";
                          
                        }
                        else
                        {

                            return "用户不是管理员身分,因此无法登陆后台";
                        }
                    }
                    else
                    {
   
                        return "用户不存在或密码错误";
                    }
                }
                else
                {
                    return "未登陆前台!";
                }
            }
            catch(Exception ex)
            {
                return ex.Message;
            }
        }

        /// <summary>
        /// 查看是否登陆,如果登陆那么返回空
        /// </summary>
        /// <returns></returns>
        public string GetAdminLoginInfo()
        {
            config = GeneralConfigs.GetConfig();


            // 如果IP访问列表有设置则进行判断
            if (config.Adminipaccess.Trim() != "")
            {
                string[] regctrl = Utils.SplitString(config.Adminipaccess, "/n");
                if (!Utils.InIPArray(DNTRequest.GetIP(), regctrl))
                {
                    //Context.Response.Redirect(BaseConfigs.GetForumPath + "admin/syslogin.aspx");
                    return "IP地址被拒绝!";
                }
            }


            OnlineUserInfo oluserinfo = OnlineUsers.UpdateInfo(config.Passwordkey, config.Onlinetimeout);
            UserGroupInfo usergroupinfo = AdminUserGroups.AdminGetUserGroupInfo(oluserinfo.Groupid);
            if (oluserinfo.Userid <= 0 || usergroupinfo.Radminid != 1)
            {
                //Context.Response.Redirect(BaseConfigs.GetForumPath + "admin/syslogin.aspx");
                return "管理员数据有误!";
            }

            string secques = Users.GetUserInfo(oluserinfo.Userid).Secques;

            // 管理员身份验证
            if (Context.Request.Cookies["dntadmin"] == null || Context.Request.Cookies["dntadmin"]["key"] == null || ForumUtils.GetCookiePassword(Context.Request.Cookies["dntadmin"]["key"].ToString(), config.Passwordkey) != (oluserinfo.Password + secques + oluserinfo.Userid.ToString()))
            {
                //Context.Response.Redirect(BaseConfigs.GetForumPath + "admin/syslogin.aspx");
                return "Cookie不存在!" ;
            }
            else
            {
                HttpCookie cookie = HttpContext.Current.Request.Cookies["dntadmin"];
                cookie.Values["key"] = ForumUtils.SetCookiePassword(oluserinfo.Password + secques + oluserinfo.Userid.ToString(), config.Passwordkey);
                cookie.Expires = DateTime.Now.AddMinutes(30);
                HttpContext.Current.Response.AppendCookie(cookie);

            }

            return "" ;
        }

        public DcUsers(Page p)
        {
            page = p;
        }

  public DcUsers()
  {
   //
   // TODO: 在此处添加构造函数逻辑
   //
  }
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值