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开发的网站, 欢迎大家特别是已经成功整合的用户发帖讲述自己的经验


首先在你的程序中引用
  1. using Discuz.Common;

  2. using Discuz.Forum;

复制代码
然后将指定的用户信息创建为一个用户
  1. // 用户名这里为tmpUsername



  2. // 判断用户名是否已被注册

  3.    if (UserFactory.Exists(tmpUsername))  

  4.     {

  5.      // 这里提示该用户名已经被使用

  6.      // return;

  7.     }

  8.     else if (!Utils.IsSafeSqlString(tmpUsername))

  9.     {

  10.      // 提示用户名中存在非法字符

  11.      return;

  12.     }

  13.     else if (tmpUsername.Trim() ==  PrivateMessageFactory.SystemUserName || ForumUtils.IsBanUsername(tmpUsername, config.Censoruser))

  14.     {

  15.       //提示用户名属于禁止名单, 或者与负责发送新用户注册欢迎信件的用户名称相同...

  16.       return;

  17.     }

  18.     else if (ForumUtils.InBanWordArray(tmpUsername))

  19.     {

  20.       //提示用户名含有论坛禁止的词语, 请更换

  21.       return;

  22.     }

  23.     if(UserFactory.FindUserEmail(email) != -1)

  24.     {

  25.       //提示email已经被其它用户注册使用

  26.       return;

  27.     }



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

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

  2.      __userinfo.Username     = Utils.HtmlEncode(tmpUsername); //用户名

  3.      __userinfo.Nickname     = Utils.HtmlEncode(DNTRequest.GetString("nickname")); // 用户昵称

  4.      __userinfo.Password     = Utils.MD5(DNTRequest.GetString("password")); // 将密码明文进行md5加密

  5.      __userinfo.Gender     = DNTRequest.GetInt("gender", 0); //性别

  6.      __userinfo.Adminid     = 0;

  7.      __userinfo.Groupexpiry    = 0;

  8.      __userinfo.Extgroupids    = "";

  9.      __userinfo.Regip     = DNTRequest.GetIP(); //获得用户ip

  10.      __userinfo.Joindate     = Utils.GetDateTime();

  11.      __userinfo.Lastip     = DNTRequest.GetIP();

  12.      __userinfo.Lastvisit    = Utils.GetDateTime();

  13.      __userinfo.Lastactivity    = Utils.GetDateTime();

  14.      __userinfo.Lastpost     = Utils.GetDateTime();

  15.      __userinfo.Lastpostid    = 0;

  16.      __userinfo.Lastposttitle   = "";

  17.      __userinfo.Posts     = 0;

  18.      __userinfo.Digestposts    = 0;

  19. // 更多属性的值.........

复制代码
给UserInfo类型的实例赋值后调用UserFactory.CreateUser方法创建用户, 返回值为int类型, 如果创建失败返回-1, 如果创建成功则返回用户的uid
  1. int uid = UserFactory.CreateUser(__userinfo);

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

如果只知道用户名, 那也可以凭用户名得到其uid, 如果存在该用户, 则返回uid, 如果不存在该用户, 则返回-1
  1. int uid = UserFactory.GetUserID("张三")

复制代码
获得一个用户的信息:
  1. public static UserInfo GetUserInfo(int uid)

复制代码
例如要获得uid为256的用户的信息就是:
  1. UserInfo __userinfo = UserFactory.GetUserInfo(256);

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


如果事先得到了论坛cookie里的userid和password,可以用
  1. 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的创建用户和用户登录验证的调用方法示例