我正在使用VS2010为我的学校组织制作一个简单的ASP.NET网页。当我选择“新网站”时,我发现Visual Studio已经建立了一个用于管理成员资格的数据库。我还有自己需要用于网站的数据库(MyDatabase),其中包含有关组织成员的信息(例如,电子邮件,电话号码等)
我需要找到当前登录用户的身份,并允许他们仅编辑他们的信息(电子邮件,电话号码)。
我考虑这样做的方式是:
- 在MyDatabase中添加一个名为“UserName”的字段,并将其用作来自其他数据库的排序外键
- 获取登录用户的用户名
- 将此用户名用于我的查询例如:
// (PseudoCode)
String loggedInUser = MembersDatbase.GetLoggedInUser();
var MemberInfo = SELECT * FROM MyDatabase.Users WHERE UserName=loggedInUser;
- 然后登录用户只能访问他们的信息。
我还不确定代码,但我可能想出那部分内容。我更感兴趣的是,如果有更好的方法可以做到这一点。我不想将这两个数据库合并到一个数据库中。
感谢。
答案 0 :(得分:3)
我建议使用aspnet_regsql.exe将成员资格表安装到现有的MyDatabase,而不是使用网站模板创建的默认数据库。然后,我将使用aspnet_Users表的UserId字段链接表,而不是通过用户名链接。请查看以下链接:
1:Tutorial: Install membership table in existing database 。 Check the video here.
答案 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();
}
希望这有帮助。