如何为具有ASP.NET Identity 2的用户添加用户电子邮件地址

时间:2014-05-25 14:18:57

标签: asp.net asp.net-web-api asp.net-identity asp.net-identity-2

我有一个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 
}

但是我不知道该怎么做:

  • 我是否应该将电子邮件添加到上面的“#34; //在此处添加自定义用户声明”#34;如果是的话那我该怎么做?
  • 我是否应该对下面的注册方法进行更改,如果是,那我应该怎么做?

    [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应用程序中使用基于令牌的方法和声明。如果可能的话,我希望通过声明而不是仅仅通过向用户表添加列来实现此目的。

1 个答案:

答案 0 :(得分:3)

IdentityUser类已包含电子邮件地址的属性,因此无需复制该属性。您只需在注册过程中设置该属性,类似于以下代码段

IdentityUser user = new IdentityUser
{
    UserName = model.UserName,
    Email = model.Email
};

不要忘记使用该附加属性和字段扩展 RegisterViewModel 注册视图。