【问题标题】:Reference ASP.NET Membership Database In Another Database在另一个数据库中引用 ASP.NET 成员资格数据库
【发布时间】:2011-01-01 17:38:16
【问题描述】:

我正在使用 VS2010 为我的学校组织制作一个简单的 ASP.NET 网页。当我选择“新网站”时,我看到 Visual Studio 已经设置了一个用于管理成员资格的数据库。我还有自己的数据库 (MyDatabase),需要用于网站,其中包含有关组织成员的信息(例如,电子邮件、电话号码等)

我需要有办法找出当前登录的用户是谁,并允许他们只编辑他们的信息(电子邮件、电话号码)。

我考虑过的做法是:
- 在 MyDatabase 中添加一个名为“UserName”的字段,并将其用作其他数据库的外键。
- 获取登录用户的用户名
- 将此用户名用于我的查询 例如:

// (PseudoCode)    
String loggedInUser = MembersDatbase.GetLoggedInUser();    
var MemberInfo = SELECT * FROM MyDatabase.Users WHERE UserName=loggedInUser;

-那么登录的用户将只能访问他们的信息。

我还不确定代码,但我可能会弄清楚那部分。如果有更好的方法可以做到这一点,我更感兴趣。我不想将两个数据库合并到一个数据库中。

谢谢。

【问题讨论】:

    标签: asp.net sql-server visual-studio-2010


    【解决方案1】:

    我建议不要使用网站模板创建的默认数据库,而是使用 aspnet_regsql.exe 将成员资格表安装到您现有的 MyDatabase。然后,我将使用 aspnet_Users 表的 UserId 字段链接表,而不是通过用户名链接。检查以下链接:

    1:Tutorial: Install membership table in existing database . Check the video here.

    2:Link membership table to user info table

    【讨论】:

    • 这打破了身份验证/授权可插入的整个想法,这在 Membership API 中非常重要
    • @Tim Mahy:我认为在 OP 的场景中没有必要使用两个单独的数据库。我不确定你所说的“休息”到底是什么意思。
    • 它是一个provider-configurable-API,通过使用特定实现的实现细节(SQLServer默认实现),整个provider-configurable部分被丢弃
    • @Tim Mahy:OP 希望通过 FK 关系将他现有的表与成员表链接起来。在这种情况下,两个表都需要位于同一个数据库中。是的,如果没有链接,那么这两个数据库将毫无问题地工作。按照我上面建议的方式,实际上需要将提供程序配置为指向现有数据库而不是默认创建的数据库。所以我仍然不明白“提供者可配置部分是如何被丢弃的”?
    【解决方案2】:

    我会使用这种方法,但我会使用 ProviderUserKey 和 ProviderName 属性值来映射到数据库中的用户..

    【讨论】:

      【解决方案3】:

      我在我的应用程序中使用了类似的方法。我有一个单独的会员数据库,在保存有关用户的其他数据时,我只需获取 ProviderUseKey 并将其保存在包含其他用户数据的单独表中。

      这里是示例代码:

          [AcceptVerbs(HttpVerbs.Post)]
          public ActionResult Register(string userName, string email, string password, string confirmPassword)
          {
              ViewData["PasswordLength"] = MembershipService.MinPasswordLength;
      
              if (ValidateRegistration(userName, email, password, confirmPassword))
              {
                  // Attempt to register the user
                  var createStatus = MembershipService.CreateUser(userName, password, email);
      
      
                  switch (createStatus)
                  {
                      case MembershipCreateStatus.Success:
                          FormsAuth.SignIn(userName, false /*createPersistentCookie */);
                          var userInfo = System.Web.Security.Membership.GetUser(userName);
                          if (userInfo != null)
                          {
                              if (userInfo.ProviderUserKey != null)
                              {
                                  var regularUser = new RegularUser { UserName = userInfo.UserName, Email = userInfo.Email, ProviderUserKey = userInfo.ProviderUserKey.ToString() };
                                  _regularUserRepository.SaveOrUpdate(regularUser);
                              }
                          }
                          return RedirectToAction("Index", "Home");
                      default:
                          ModelState.AddModelError("_FORM", ErrorCodeToString(createStatus));
                          break;
                  }
              }
      
              // If we got this far, something failed, redisplay form
              return View();
          }
      

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-20
        相关资源
        最近更新 更多