我正在使用 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。