在另一个数据库中引用ASP.NET成员资格数

时间:2011-01-01 17:38:16

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

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

我需要找到当前登录用户的身份,并允许他们仅编辑他们的信息(电子邮件,电话号码)。

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

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

- 然后登录用户只能访问他们的信息。

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

感谢。

3 个答案:

答案 0 :(得分:3)

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

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

2:Link membership table to user info table

答案 1 :(得分:1)

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

答案 2 :(得分:1)

我在我的应用程序中使用了类似的方法。我有一个单独的成员资格数据库,当保存有关用户的其他数据时,我只需获取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();
    }

希望这有帮助。