在 Web API 的标识存储中创建新用户时存储其他信息



我正在使用 OWIN 构建/学习基于令牌的身份验证,我想弄清楚如何在创建新用户时插入其他信息。UserManager 接受 IdentityUser,但 CreateAsync 方法只接受用户名和密码。我想至少添加电子邮件地址。 我看到有一个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();
        }
    }
您可以通过

继承 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。

最新更新