Neo*_*Neo 7 asp.net asp.net-mvc membership-provider asp.net-mvc-3 asp.net-mvc-2
我已覆盖成员资格方法以创建自定义成员资格.
在帐户模型中,我覆盖了该方法CreateUser
:
public override MembershipUser CreateUser(string username, string password,
string email, string passwordQuestion, string passwordAnswer,
bool isApproved, object providerUserKey, out MembershipCreateStatus status)
{
ValidatePasswordEventArgs args = new ValidatePasswordEventArgs(
username, password, true);
OnValidatingPassword(args);
if (args.Cancel)
{
status = MembershipCreateStatus.InvalidPassword;
return null;
}
if (RequiresUniqueEmail && GetUserNameByEmail(email) != "")
{
status = MembershipCreateStatus.DuplicateEmail;
return null;
}
MembershipUser u = GetUser(username, false);
if (u == null)
{
UserRepository _user = new UserRepository();
// Here I call my new method which has fields I've created in the
// User table; I'm using entity framework.
_user.CreateUser(username, password, email);
status = MembershipCreateStatus.Success;
return GetUser(username, false);
}
else
{
status = MembershipCreateStatus.DuplicateUserName;
}
return null;
}
public MembershipUser CreateUser(string username, string password,
string email)
{
using (CustomMembershipDB db = new CustomMembershipDB())
{
User user = new User();
user.UserName = username;
user.Email = email;
user.PasswordSalt = CreateSalt();
user.Password = CreatePasswordHash(password, user.PasswordSalt);
user.CreatedDate = DateTime.Now;
user.IsActivated = false;
user.IsLockedOut = false;
user.LastLockedOutDate = DateTime.Now;
user.LastLoginDate = DateTime.Now;
//Generate an email key
// user.NewEmailKey = GenerateKey();
db.AddToUsers(user);
db.SaveChanges();
//send mail
// SendMail(user);
return GetUser(username);
}
}
Run Code Online (Sandbox Code Playgroud)
现在我需要添加更多两个字段,如名字和姓氏,但我怎样才能将它传递给上面的方法?
因为CreateUser
如果我在其中添加诸如名字和姓氏之类的参数,覆盖方法会给我一个错误:(
您需要实现自定义成员资格用户.这是一个示例实现:
另外看一下这个帖子:
您可以保持 AspNetUsers 表不变,并创建一个新表来存储额外信息(链接到原始表)。这样您就不会破坏会员资格提供程序中的任何现有代码。
原始的AspNetUsers表有:[Id],[Email],[EmailConfirmed],[PasswordHash],[SecurityStamp],[PhoneNumber],[PhoneNumberConfirmed],[TwoFactorEnabled],[LockoutEndDateUtc],[LockoutEnabled],[AccessFailedCount], [用户名]
用于存储额外数据的新表可以具有例如:[Id]、[UserId][DateOfBirth]、[Biography]等。其中[UserId]是AspNetUsers表的外键。
这种方法的一个优点是,您可以创建多种类型的用户,每种用户将其相关信息存储在不同的表中,而公共数据仍在原始表中。
如何:
更新帐户控制器中的注册方法,以下是使用插入新配置文件数据的代码更新的原始方法:
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Register(RegisterViewModel model)
{
if (ModelState.IsValid)
{
var user = new ApplicationUser() { UserName = model.Email, Email = model.Email };
IdentityResult result = await UserManager.CreateAsync(user, model.Password);
if (result.Succeeded)
{
// Start of new code ----------------------------------------
// Get Id of newly inserted user
int userId = user.Id; // Get Id of newly inserted user
// Create a profile referencing the userId
AddUserProfile(userId, model);
// End of new code ----------------------------------------
await SignInAsync(user, isPersistent: false);
return RedirectToAction("Index", "Home");
}
else
{
AddErrors(result);
}
}
return View(model);
}
Run Code Online (Sandbox Code Playgroud) 归档时间: |
|
查看次数: |
9464 次 |
最近记录: |