科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件ASP.NET Forums与现有系统整合方案示例

ASP.NET Forums与现有系统整合方案示例

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

已有系统已经有自己的一套用户系统,需要挂接ANF,要求在已有系统用户注册,登录,修改密码时,在ANF中也做出相应反映。

作者:simonw 来源:博客园 2007年11月7日

关键字: ASP.NET 整合方案 示例 Windows

  • 评论
  • 分享微博
  • 分享邮件
Asp.Net Forums以下简称ANF,版本2.0,本文系数流水帐,只是记录了一下今的工作,没啥技术含量。

  已有系统已经有自己的一套用户系统,需要挂接ANF,要求在已有系统用户注册,登录,修改密码时,在ANF中也做出相应反映。不要求ANF的用户变化影响已有系统,只是单向同步。

  在尽量少动已有代码的情况下找一种简单的方式来完成整合。之前看了宝玉的CnForums和已有系统的整合方案,最后偷懒决定在已有系统上述动作结束后将用户相关信息和操作类型附加在url后面传给一个新建页来处理在ANF中执行相关操作。

  这新建页暂且叫bridge.aspx 当然要建在ANF的项目中该using的都using了,负责接收用户名密码等信息然后执行相应的ANF操作。

  注册

  注册很简单,我的Username和Password是自己包装的属性,从Request中获取信息,我们系统没有Email就随便添一个,接下来要给AccountStatus设置为通过,IsAnonymous关掉。Users.Create中那个bool参数代表是否给用户发送注册成功提示的邮件,我没邮件当然关掉。


  注意我在所有的地方都catch吸收掉错误,而无返回,你不一定要这么做。

public void Register()
{
 try
 {
  User user = new User();
  user.Username = Username;
  user.Password = Password;
  user.Email = "Anonymous@Anonymous.com";
  user.AccountStatus = UserAccountStatus.Approved;
  user.IsAnonymous = false;
  Users.Create(user, false);
 }
 catch
 {
 }
}

  登录

  基本上都是复制粘贴过来的,注意最后的setcookie,这是同步登录的关键。

public void Login()
{
 try
 {
  User userToLogin = new User();
  userToLogin.Username = Username;
  userToLogin.Password = Password;

  LoginUserStatus loginStatus = Users.ValidUser(userToLogin);

  if (loginStatus == LoginUserStatus.Success)
  {
   if (!Globals.GetSiteSettings().AllowLogin)
   {
    bool allowed = false;

    int userid = Users.FindUserByUsername(userToLogin.Username).UserID;
    ArrayList roles = Roles.GetRoles(userid);

    foreach (Role role in roles)
    {
     if (role.Name == "Site Administrators" || role.Name == "Global Administrators")
     {
      allowed = true;
      break;
     }
    }
    if (!allowed)
    {
     return;
    }
   }
   set_Cookie(userToLogin.Username, "1");
  }
 }
 catch
 {
 }
}

  修改密码

  这个假设是基于登录已经发生的,如果你的假设不是这样需要加入自己的判断。

public void ChangePassword()
{
 try
 {
  ForumContext forumContext = ForumContext.Current;
  User user = forumContext.User;
  if (user != null)
  {
   user.ChangePassword(Password, NewPassword);
  }
 }
 catch
 {
 }
}

  设置cookie

public void set_Cookie(string Username, string Selet_item)
{
 if(Selet_item == "0")
 {
  FormsAuthentication.SetAuthCookie(Username,false);
 }
 else
 {
  ForumContext forumContext = ForumContext.Current;
  FormsAuthentication.SetAuthCookie(Username,true);
  forumContext.Context.Response.Cookies[FormsAuthentication.FormsCookieName].Expires=DateTime.
      _Now.AddDays(System.Convert.ToInt32(Selet_item));
 }
}

  最后在已有系统的注册,登录,修改的最后Response.Redirect这页就ok,不喜欢Redirect,Server.Transfer,xmlhttp都行,看你需要的展现了。还有一点很关键,就是要加密了你传输的字符串,要不明文就……※¥※×%※× ,要是嫌还不安全就用ip判断一下谁可以访问这页!

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章