在web api中在IdentityStore中创建新用户时存储其他信息

时间:2018-03-07 05:04:10

标签: asp.net asp.net-web-api2

我正在使用OWIN构建/学习基于令牌的身份验证,我想了解如何在创建新用户时插入其他信息。 UserManager接受IdentityUser,但CreateAsync方法仅接受用户名和passowrd。我想至少添加电子邮件地址。我看到有一个SetEmailAsync方法,但这需要第二次调用。我觉得应该有一个允许我插入其他列的调用,但我没有找到任何关于如何执行此操作的文档,也没有找到与StackOverflow中密切相关的问题。

以下是保存例程:

public class AuthRepository : IDisposable
    {
        private readonly AuthContext _context;
        private readonly UserManager<IdentityUser> _userManager;

        public AuthRepository()
        {
            _context = new AuthContext();
            _userManager = new UserManager<IdentityUser>(new UserStore<IdentityUser>(_context));
        }
        public async Task<IdentityUser> FindUserAsync(string userName, string password)
        {
            IdentityUser user = await _userManager.FindAsync(userName, password);

            return user;
        }

        public async Task<IdentityResult> RegisterUserAsync(UserModel userModel)
        {
            var user = new IdentityUser
            {
                UserName = userModel.UserName
            };

//save all of this in one call?

            var result = await _userManager.CreateAsync(user, userModel.Password);
            var result1 = await _userManager.SetEmailAsync(userModel.UserName, userModel.EmailAddress);
            return result;
        }

        public async Task<IdentityUser> FindIdentityUserAsync(string userName, string password)
        {
            var user = await _userManager.FindAsync(userName, password);
            return user;
        }

        public void Dispose()
        {
            _context.Dispose();
            _userManager.Dispose();
        }
    }

1 个答案:

答案 0 :(得分:0)

您可以通过继承IdentityUser类来创建自己的User类。

public class User : IdentityUser
{
    public string Email { get; set; }
}

var user = new User
{
    UserName = userModel.UserName,
    Email = userModel.EmailAddress
};

var result = await _userManager.CreateAsync(user, userModel.Password);

确保使用的是User Class而不是IdentityUser。