我有一个WebAPI应用程序,我想为每个用户存储的信息添加一封电子邮件。虽然有很多例子,但我不确定这些是现在推荐使用Identity 2的方法。特别是我注意到Identity 2现在有扩展方法来处理电子邮件。
UserManagerExtensions.FindByEmail Method
但是如何存储电子邮件以便我可以使用此扩展方法?我是否需要将其存储在此处?如果可以,我可以将其存储为声明吗?
public class ApplicationUser : IdentityUser {
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager) {
// Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
// Add custom user claims here
return userIdentity;
}
// I don't want to add email here
}
但是我不知道该怎么做:
我是否应该对下面的注册方法进行更改,如果是,那我应该怎么做?
[AllowAnonymous]
[Route("Register")]
public async Task<IHttpActionResult> Register(RegisterBindingModel model)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
IdentityUser user = new IdentityUser
{
UserName = model.UserName
};
IdentityResult result = await UserManager.CreateAsync(user, model.Password);
IHttpActionResult errorResult = GetErrorResult(result);
if (errorResult != null)
{
return errorResult;
}
return Ok();
}
我很感激有关如何做到这一点的一些建议。请注意,我在Identity2应用程序中使用基于令牌的方法和声明。如果可能的话,我希望通过声明而不是仅仅通过向用户表添加列来实现此目的。
答案 0 :(得分:3)
IdentityUser类已包含电子邮件地址的属性,因此无需复制该属性。您只需在注册过程中设置该属性,类似于以下代码段
IdentityUser user = new IdentityUser
{
UserName = model.UserName,
Email = model.Email
};
不要忘记使用该附加属性和字段扩展 RegisterViewModel 和注册视图。