Roo*_*oss 2 asp.net-identity .net-core mediatr asp.net-core
I am trying to implement Identity using the Mediatr library and pattern...
The code i am using did work in dotnetcore 2.x and identity 2.2 but is broken in dotnetcore 3.x and identity 3.1.1...
My Application class library is netstandard2.1 and hase the following dependencies set.
<PackageReference Include="FluentValidation.AspNetCore" Version="8.6.1" />
<PackageReference Include="MediatR.Extensions.Microsoft.DependencyInjection" Version="8.0.0" />
<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="3.1.1" />
Run Code Online (Sandbox Code Playgroud)
I have my request handler like so;
public class Handler : IRequestHandler<Query, AppUser>
{
private readonly UserManager<AppUser> _userManager;
private readonly SignInManager<AppUser> _signInManager;
public Handler(UserManager<AppUser> userManager, SignInManager<AppUser> signInManager)
{
_userManager = userManager;
_signInManager = signInManager;
}
public async Task<AppUser> Handle(Query request, CancellationToken cancellationToken)
{
var user = await _userManager.FindByEmailAsync(request.Email);
if (user == null)
{
throw new Exception("Unauthorized");
}
// var result = await _signInManager.CheckPasswordSignInAsync(user, request.Password, false);
var result = await _userManager.CheckPasswordAsync(user, request.Password);
if (result)
{
return user;
}
throw new Exception("Unauthorized");
}
}
Run Code Online (Sandbox Code Playgroud)
我在这里遇到的问题是我无法再解析 SignInManager,我不知道为什么。我也找不到有关身份版本之间围绕此的任何重大更改的太多信息。SignInManager 去哪儿了?我认为 UserManager 在同一个命名空间中, UserManager 解析得很好。现在超级困惑,正如你所看到的,我正准备欺骗我的出路,但它不适合我。
在我的 API 项目中使用相同的依赖项,我可以使用相同的命名空间引用 SignInManager,我可以使用它直接在控制器中登录。我如何将其与 Mediatr 处理程序分离?
从 3.0 版开始,ASP.NET Core 不再完全通过 NuGet 分发。相反,它作为 .NET Core 运行时的一部分作为共享框架提供。只有可选包,如Microsoft.AspNetCore.Identity.EntityFrameworkCore仍然通过 NuGet 分发。但是,这些包没有定义会自动工作的瞬态依赖项,因此您仍然需要正确引用此共享框架才能使用这些类型。
为此,您需要将项目切换到目标,netcoreapp3.1因为 ASP.NET Core 仅在 .NET Core 上运行,不能与 .NET Standard 一起使用。
完成后,您可以使用框架引用来引用共享框架。所以你的项目文件应该是这样的:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<FrameworkReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="FluentValidation.AspNetCore" Version="8.6.1" />
<PackageReference Include="MediatR.Extensions.Microsoft.DependencyInjection" Version="8.0.0" />
<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="3.1.1" />
</ItemGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1115 次 |
| 最近记录: |