Discuz!NT官方社区

首页 » Discuz!NT开发与测试 » Discuz!NT整合 » 单点登入(笨办法,需要的可以用用)
67251026 - 2008-5-7 14:23:00
在DiscuzNT的general.config中设置:
<CookieDomain>.whatscar.com </CookieDomain>
把DiscuzNT的dll文件拷贝的网站的bin目录,把Discuz的config文件夹和DNT.config文件也拷贝到www网站的根目录下。
把DiscuzNT的dll Import到工程中来

在自己的config中配置
<appSettings>
<add key="domainName" value=".whatscar.com "/>
</appSettings>


引用:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.IO;
using System.Security.Cryptography;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using Discuz.Common;
using Discuz.Forum;
using Discuz.Config;
using Discuz.Entity;



public void UserLogin( string username,string userpass)
    {
        string password = userpass;//密码
        string pass1 = (FormsAuthentication.HashPasswordForStoringInConfigFile(password.Trim(), "MD5"));//MD5加密
        string pass2=pass1.ToLower();
        bool IsPersistent = false;
        FormsAuthentication.SetAuthCookie(username, IsPersistent);
        HttpCookie cookie = HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName];
        string domainName = ConfigurationManager.AppSettings["domainName"];
        DateTime expires;
        if (IsPersistent) expires = DateTime.Now.AddMinutes(525600);//一年
        else expires = DateTime.Now;
        SetCookie(cookie, domainName, IsPersistent, expires);
      Discuz.Config.GeneralConfigInfo config = Discuz.Config.GeneralConfigs.GetConfig();
      int uid;
     
      if (ser.BbsGetUidByName(username, pass2).Tables[0].Rows.Count != 0)
      {
          uid = int.Parse(BbsGetUidByName(username, pass2).Tables[0].Rows[0]["uid"].ToString());
      }
      else
      {
          uid = -1;
      }
     
        if (uid != -1)
        {
           
            ShortUserInfo __userinfo = Users.GetShortUserInfo(uid);
            if (__userinfo.Groupid == 8)
            {
              Response.Write("抱歉, 您的用户身份尚未得到验证");
               
                //...
                //
                if (config.Regverify == 1)
                {
                    //这里添加代码提示“请您到您的邮箱中点击激活链接来激活您的帐号"并return退出
                    //...
                    //
                }
                if (config.Regverify == 2)
                {
                    //这里添加代码提示“您需要等待一些时间, 待系统管理员审核您的帐户后才可登录使用"并return退出
                    //...
                    //
                }
            }
            else
            {
                //删除之前的错误登录信息
                LoginLogs.DeleteLoginLog(DNTRequest.GetIP());
                //根据积分公式刷新用户总积分
                UserCredits.UpdateUserCredits(uid);
                //写入用户登录后的cookie
                ForumUtils.WriteUserCookie(uid, Utils.StrToInt(DNTRequest.GetString("expires"), -1), config.Passwordkey, DNTRequest.GetInt("templateid", 0), DNTRequest.GetInt("loginmode", -1));
                //更新用户最后动作,如不需要可不执行
                OnlineUsers.UpdateAction(uid, UserAction.Login.ActionID, 0, config.Onlinetimeout);
                //更新该用户最后访问时间
                Users.UpdateUserLastvisit(uid, DNTRequest.GetIP());
                //登录完毕,此处添加代码提示登录成功并转向到其它页面
                //...
                //
                Response.Write(uid);

            }
        }
        else
        {
            int errcount = LoginLogs.UpdateLoginLog(DNTRequest.GetIP(), true);
            if (errcount > 5)
            {
                //这里添加代码提示“您已经输入密码5次错误, 请15分钟后再试"并return退出
                //...
                //
            }
            else
            {
                //AddErrLine("密码或安全提问第" + errcount.ToString() + "次错误, 您最多有5次机会重试");
                //这里添加代码提示“密码或安全提问错误"并return退出
                //...
                //
            }
        }

   
    }



/// <summary>
/// 论坛整合
/// </summary>
/// <param name="name">用户名</param>
/// <param name="password">密码</param>
/// <returns></returns>
    public DataSet BbsGetUidByName(string name,string password)
    {
        string sqlstr = "SELECT [uid],[username]FROM [whatscar].[dbo].[dnt_users] where username='" + name + "' and password='" + password + "'";
        SqlDataAdapter da = new SqlDataAdapter(sqlstr, con);
        DataSet ds = new DataSet();
        da.Fill(ds);
        return ds;
    }


然后调用UserLogin这个方法就可以了
smdcn - 2008-5-14 18:03:00
其实直接引用DZNT的DLL是最方便的办法= =
67251026 - 2008-6-11 11:12:00
这个是2个域名下 - -!!
shp_yt - 2008-6-11 21:40:00
有一个域名下的吗?也就是说dis做为虚拟目录配置的
userid - 2008-6-12 9:49:00
不错的方法
1
查看完整版本: 单点登入(笨办法,需要的可以用用)