我正在开发两个不同的应用程序,我将它们命名为 A 和 B。
- A 是一个互联网平台,只有拥有有效用户帐户才能登录。
- B 是一个 Intranet 平台,用户可以在其中通过 Active Directory 进行身份验证。使用应用程序 B 的管理员应该能够为应用程序 A 创建新的用户帐户。
创建新用户帐户后,我希望能够实现不同的功能,例如向注册的邮件地址发送电子邮件,以便新用户可以更改默认密码。
我想要实现的所有功能都可以由UserManager完成(请参阅以下链接中的“使用另一个应用程序添加用户”部分:https ://docs.microsoft.com/en-us/aspnet/core/security /authentication/scaffold-identity?view=aspnetcore-3.1&tabs=visual-studio#disable-register-page)。
基于此,我实现了以下代码:
public class ControllerClass : Controller
{
private readonly HelperClass _helper;
private readonly UserManager<IdentityUser> _userManager;
public ControllerClass (UserManager<IdentityUser> userManager)
{
_userManager = userManager;
_helper= new HelperClass (userManager);
}
}
public class HelperClass
{
private readonly DbContext _db;
private readonly UserManager<IdentityUser> _userManager;
public HelperClass (UserManager<IdentityUser> userManager)
{
_db = new DbContext ();
_userManager = userManager;
}
private async Task<string> EnsureUser(string userName, string userPassword)
{
var user = await _userManager.FindByNameAsync(userName);
if (user == null)
{
user = new IdentityUser()
{
UserName = userName
};
await _userManager.CreateAsync(user, userPassword);
}
return user.Id;
}
internal async void CreateUser(UserVM uvm, int id)
{
var userId = await EnsureUser(uvm.userName, uvm.userPassword);
// TODO ...
}
}
不幸的是,我没有设法将UserManager包含到我的应用程序 B 中。我收到以下错误消息:“处理请求时发生未处理的异常。InvalidOperationException:无法解析类型'Microsoft.AspNetCore.Identity.UserManager`1 的服务[IdentityUser]' 在尝试激活 'ControllerClass' 时。”
您有什么想法,我如何添加UserManager来管理另一个应用程序的用户?