EF Core 8 身份 - SignInManager / _loginPartial 问题

问题描述 投票:0回答:1

在我带有 Identity 的 EF Core 8 Web 应用程序中,我的登录部分无法正常工作(不再)。

身份页面未加载,甚至似乎也未触发相应的控制器操作。

因此我无法使用身份功能。

我有一个自定义 UserManager

appUserManager<User>
和一个自定义用户类
User

我的

appuserManager<User>
现阶段没有进一步的方法,我只是准备课程而已。

public class AppUserManager : UserManager<User>
{
    
    private readonly IHttpContextAccessor _httpContextAccessor;
    private readonly AppDbContext _context;

    public AppUserManager(IUserStore<User> store,
                            IOptions<IdentityOptions> optionsAccessor,
                            IPasswordHasher<User> passwordHasher,
                            IEnumerable<IUserValidator<User>> userValidators,
                            IEnumerable<IPasswordValidator<User>> passwordValidators,
                            ILookupNormalizer keyNormalizer,
                            IdentityErrorDescriber errors,
                            IServiceProvider services,
                            ILogger<UserManager<User>> logger,
                            IHttpContextAccessor httpContextAccessor,
                            AppDbContext context)
        : base(store, optionsAccessor, passwordHasher, userValidators, passwordValidators, keyNormalizer, errors,
            services, logger)
    {
        _httpContextAccessor = httpContextAccessor;
        _context = context;
    }

[...]

}

因此,我在我的

program.cs
中注册了如下身份服务:

builder.Services.AddIdentity<User, Role>(options => options.Sign.RequireConfirmedAccount = true)                
                .AddSignInManager<SignInManager<User>>()
                .AddEntityFrameworkStores<AppDbContext>()
                .AddUserManager<AppUserManager>()
                .AddRoleManager<AppRoleManager>()                
                .AddDefaultTokenProviders();

登录部分如下:

@using MyApp.Areas.Admin.Users
@using Microsoft.AspNetCore.Identity
@using MyApp.Areas.Admin.Sign


@inject SignInManager<User> SignInManager
@inject AppUserManager AppUserManager

<ul class="navbar-nav">
    @if (SignInManager.IsSigned(User))
{
    <li class="nav-item">
        <a  class="nav-link text-dark" asp-area="Identity" asp-page="/Account/Manage/Index" title="Manage">Hello @User.Identity?.Name!</a>
    </li>
    <li class="nav-item">
        <form  class="form-inline" asp-area="Identity" asp-page="/Account/Logout" asp-route-returnUrl="@Url.Action("Index", "Home", new { area = "" })">
            <button  type="submit" class="nav-link btn btn-link text-dark">Logout</button>
        </form>
    </li>
}
else
{
    <li class="nav-item">
        <a class="nav-link text-dark" asp-area="Identity" asp-page="/Account/Register">Register</a>
    </li>
    <li class="nav-item">
        <a class="nav-link text-dark" asp-area="Identity" asp-page="/Account/Login">Login</a>
    </li>  
}
</ul>

现在发生的情况是,所有身份页面(登录、注册等)都没有加载,而是停留在我来自的页面上(所以没有重定向)。

我还注意到 URL 被称为

https://localhost:1234/?area=Identity&page=/Account/Login
而不是

https://localhost:1234/Identity/Account/Login.

如果我直接调用路由,则会收到 404 错误。

当我回滚自定义 appUserManager 类并在我的

program.cs
中注册默认身份服务时,我可以访问身份页面,并且它们按照 MS 的预期工作。

builder.Services.AddDefaultIdentity<IdentityUser>(options => options.Sign.RequireConfirmedAccount = true)
    .AddEntityFrameworkStores<AppDbContext>();

我还尝试创建一个自定义的

appSignInManager
,直接使用
User
类而不是
IdentityUser
,但它也没有解决问题。

此外,我在原始

_loginPartial
program.cs
SignInManager
以及我的继承类与
User
/
IdentityUser
中测试了多种组合,但没有成功。

我可能只是因为没有发现明显的问题而盲目,但仍然 - 我不知道如何解决这个问题。

c# entity-framework-core asp.net-identity
1个回答
0
投票

没关系,我发现了这个问题。 为了解决这个问题,我必须在

.AddDefaultUI()
类的身份服务注册中添加
program.cs
,然后注册 SignInManagers:

builder.Services.AddIdentity<User, Role>(options => options.SignIn.RequireConfirmedAccount = true)

            .AddEntityFrameworkStores<AppDbContext>()
            .AddUserManager<AppUserManager>()
            .AddRoleManager<AppRoleManager>()
            .AddDefaultUI()
            .AddDefaultTokenProviders();


builder.Services.TryAddScoped<SignInManager<User>, AppSignInManager>();
builder.Services.TryAddScoped<AppSignInManager, AppSignInManager>();
© www.soinside.com 2019 - 2024. All rights reserved.