Discuz!NT官方社区

首页 » Discuz!NT开发与测试 » Discuz!NT整合 » Discuz!NT的创建用户和用户登录验证的调用方法示例
雪人 - 2006-12-8 14:11:00
注意:本帖子内容和代码已经过期,请查看最新版本Discuz!NT的用户整合说明文档。

---雪人 2007-9-17


==============================

ASP.net程序支持多种语言开发ASP.net程序, 无论选择C#,VB.net,J#, Managed C++,J#或Python来开发你的ASP.net网站的各个模块, 都可以做到方法级的互相调用
因此以下c#程序也可以用于vb.net开发的网站, 欢迎大家特别是已经成功整合的用户发帖讲述自己的经验


首先在你的程序中引用

using Discuz.Common;
using Discuz.Forum;


然后将指定的用户信息创建为一个用户

// 用户名这里为tmpUsername

// 判断用户名是否已被注册
  if (UserFactory.Exists(tmpUsername)) 
    {
    // 这里提示该用户名已经被使用
    // return;
    }
    else if (!Utils.IsSafeSqlString(tmpUsername))
    {
    // 提示用户名中存在非法字符
    return;
    }
    else if (tmpUsername.Trim() ==  PrivateMessageFactory.SystemUserName || ForumUtils.IsBanUsername(tmpUsername, config.Censoruser))
    {
      //提示用户名属于禁止名单, 或者与负责发送新用户注册欢迎信件的用户名称相同...
      return;
    }
    else if (ForumUtils.InBanWordArray(tmpUsername))
    {
      //提示用户名含有论坛禁止的词语, 请更换
      return;
    }
    if(UserFactory.FindUserEmail(email) != -1)
    {
      //提示email已经被其它用户注册使用
      return;
    }

// 你也可以增加更多你自己的检测规则, 尽量保证用户信息的合法和安全......


判断完了信息就可以创建新用户了, 用户的信息很多, 但只给部分主要信息赋值就可以创建一个新用户, 属性与dnt_users表字段名基本一致
UserInfo类的属性涵盖了用户的信息 (所以, 开发者其实可以用.net的反射机制来得到UserInfo类的所有属性)

    UserInfo __userinfo = new UserInfo();
    __userinfo.Username    = Utils.HtmlEncode(tmpUsername); //用户名
    __userinfo.Nickname    = Utils.HtmlEncode(DNTRequest.GetString("nickname")); // 用户昵称
    __userinfo.Password    = Utils.MD5(DNTRequest.GetString("password")); // 将密码明文进行md5加密
    __userinfo.Gender    = DNTRequest.GetInt("gender", 0); //性别
    __userinfo.Adminid    = 0;
    __userinfo.Groupexpiry    = 0;
    __userinfo.Extgroupids    = "";
    __userinfo.Regip    = DNTRequest.GetIP(); //获得用户ip
    __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类型的实例赋值后调用UserFactory.CreateUser方法创建用户, 返回值为int类型, 如果创建失败返回-1, 如果创建成功则返回用户的uid

int uid = UserFactory.CreateUser(__userinfo);


相关的可能还需要查询制定用户的信息

如果只知道用户名, 那也可以凭用户名得到其uid, 如果存在该用户, 则返回uid, 如果不存在该用户, 则返回-1

int uid = UserFactory.GetUserID("张三")


获得一个用户的信息:

public static UserInfo GetUserInfo(int uid)


例如要获得uid为256的用户的信息就是:

UserInfo __userinfo = UserFactory.GetUserInfo(256);


如果指定uid的用户存在, 则返回一个UserInfo描述类的实例, 否则返回null


如果事先得到了论坛cookie里的userid和password,可以用

int userid = UserFactory.CheckPassword(userid, password, false)


方法,返回值为userid,如果验证失败,则返回-1



之前有asp.net网站站长整合本论坛的用户成功, 还有什么问题或经验大家可以互相交流
aiwz - 2006-12-8 14:47:00
支持!希望整合成功的朋友分享一下整合经验。
tekboy - 2006-12-8 15:20:00
早整合好了~自己写几个文件就行了
hf_165 - 2006-12-8 15:35:00
首页调用出来了吗?
lcxlcx - 2006-12-8 16:00:00
不错,不过有数据库结构和字段说明调用起来就会更灵活。。。。。/
飞鸟雨花 - 2006-12-8 17:17:00
哈哈 等你开发CMS呢
ewebdiy - 2006-12-9 11:08:00
原来整合好了,后来一直没敢用,怕正式版后接口会调整,并且原来的版本升级也遇到了些困难,不知道rc1后还有几个版本,能否顺利升级到正式版。
禄林网络 - 2006-12-9 13:54:00
谢谢提供啊
pollen - 2006-12-9 16:31:00
支持一下,我菜鸟,恐怕是搞不来了。

就是想要NT版的supesite/X-space
没有心情 - 2006-12-9 19:57:00
好东西!绝对有用!支持!存下来对照着搞!
puyang - 2006-12-11 12:27:00
不错哦 很好~!

建议可以整合动易2007,开发个通行证什么的  也是ASPX(C#)的
ddmc - 2006-12-14 2:48:00
a
ljdl - 2006-12-15 11:21:00
:):):):)
wcnit - 2006-12-17 1:19:00
弱弱的问一下CMS是什么?
merrian - 2006-12-17 17:51:00
aspx 和 asp能整合?
YiYiWenWen - 2006-12-18 23:50:00
用户登录验证的调用方法
这个没有啊 呵呵
CnEve - 2006-12-21 17:17:00
Reflector 一下,还是比较清晰的



引用:
public class UserFactory
{
      // Methods
      public UserFactory();
      public static int CheckDvBbsPassword(string username, string password);
      public static int CheckEmailAndSecques(string username, string email, int questionid, string answer);
      public static int CheckPassword(int uid, string password, bool originalpassword);
      public static int CheckPassword(string username, string password, bool originalpassword);
      public static int CheckPassword(int uid, string password, bool originalpassword, out int groupid, out int adminid);
      public static int CheckPassword(string username, string password, bool originalpassword, out int groupid, out int adminid);
      public static int CheckPasswordAndSecques(string username, string password, bool originalpassword, int questionid, string answer);
      public static int CreateUser(UserInfo __userinfo);
      public static int DecreaseNewPMCount(int uid);
      public static int DecreaseNewPMCount(int uid, int subval);
      public static bool Exists(int uid);
      public static bool Exists(string username);
      public static int FindUserEmail(string email);
      public static UserInfo GetUserByIP(string ip);
      public static int GetUserCount();
      public static int GetUserCountByAdmin();
      public static float GetUserExtCredits(int uid, int extid);
      public static int GetUserID(string username);
      public static UserInfo GetUserInfo(int uid);
      public static OleDbDataReader GetUserInfoToReader(int uid);
      public static string GetUserJoinDate(int uid);
      public static DataTable GetUserList(int pagesize, int pageindex, string orderby);
      public static string GetUserName(int uid);
      public static int GetUserNewPMCount(int uid);
      public static int SetUserNewPMCount(int uid, int pmnum);
      public static void UpdateAuthStr(int uid);
      public static void UpdateAuthStr(int uid, string authstr, int authflag);
      public static void UpdateMedals(int uid, string medals);
      public static bool UpdateUserAvatar(int uid, string avatar, int avatarwidth, int avatarheight);
      public static int UpdateUserDigest(string useridlist);
      public static void UpdateUserExtCredits(int uid, int extid, float pos);
      public static bool UpdateUserForumSetting(UserInfo __userinfo);
      public static void UpdateUserOnlineState(int uid, int state, string activitytime);
      public static void UpdateUserOnlineState(string uidlist, int state, string activitytime);
      public static bool UpdateUserPassword(int uid, string password);
      public static bool UpdateUserPassword(int uid, string password, bool originalpassword);
      public static bool UpdateUserProfile(UserInfo __userinfo);
      public static bool UpdateUserSecques(int uid, int questionid, string answer);
      public static bool UpdateUserSignature(int uid, int sigstatus, string signature, string sightml);
}
cctv35 - 2006-12-26 11:00:00
未将对象引用设置到对象的实例。 说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。

源错误:

行 84:            }行 85:            // 判断用户名是否已被注册行 86:            else if (UserFactory.Exists("tmpUsername"))行 87:            {行 88:                Alert("对不起,该用户名已经被使用。");

淋着雨靠近你 - 2006-12-27 13:28:00
CMS 内容管理系统
chinall - 2007-1-9 15:47:00
不错
nongsoft - 2007-1-12 23:15:00


引用:
原帖由 pollen 于 2006-12-9 16:31:00 发表
支持一下,我菜鸟,恐怕是搞不来了。

就是想要NT版的supesite/X-space


呵呵,我也是,很菜,最好简单再简单
lee - 2007-1-18 10:20:00


引用:
原帖由 cctv35 于 2006-12-26 11:00:00 发表
未将对象引用设置到对象的实例。 说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导......

是不是少了个new
neo0820 - 2007-1-31 10:56:00
非常好,如果有详细的文档说明就更好了,希望以后能慢慢完善。也会越来越多的人喜欢NT版的。开源啊!
zhang - 2007-2-2 13:44:00
为什么这句报错啊,
int uid = UserFactory.CreateUser(__userinfo);
未将对象引用设置到对象的实例。

应该不为空 啊
ahhi - 2007-2-5 23:28:00
为什么这句报错啊,
int uid = UserFactory.CreateUser(__userinfo);
未将对象引用设置到对象的实例。

应该不为空 啊


=====================

你的_userinfo实例化过了吗?
给成员属性赋过值了吗?
abis - 2007-2-16 9:48:00
能否给个实际的例子啊?
冷血无情 - 2007-3-14 15:32:00
如果事先得到了论坛cookie里的userid和password

怎么样得到cookie
zpzcc - 2007-3-16 14:45:00
真好!支持!
guanvee - 2007-3-21 15:35:00
真有这个错误,完全按照例子做的

int uid = UserFactory.CreateUser(__userinfo);
未将对象引用设置到对象的实例。

会不会是因为用2.0的原因?
roberto - 2007-3-23 11:25:00


引用:
原帖由 YiYiWenWen 于 2006-12-18 23:50:00 发表
用户登录验证的调用方法
这个没有啊 呵呵


我其实也需要这个方法!
12
查看完整版本: Discuz!NT的创建用户和用户登录验证的调用方法示例