我正在使用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();
}
}
答案 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。