我尝试实现自定义UserStore和自定义RoleStore
实现接口
Public Interface ICustomRoleStore
Inherits IRoleStore(Of ApplcationRole)
Overloads Sub Dispose()
Overloads Function CreateAsync(role As ApplcationRole, cancellationToken As CancellationToken) As Task(Of IdentityResult)
Overloads Function DeleteAsync(role As ApplcationRole, cancellationToken As CancellationToken) As Task(Of IdentityResult)
Overloads Function FindByIdAsync(roleId As String, cancellationToken As CancellationToken) As Task(Of ApplcationRole)
Overloads Function FindByNameAsync(normalizedRoleName As String, cancellationToken As CancellationToken) As Task(Of ApplcationRole)
Overloads Function GetNormalizedRoleNameAsync(role As ApplcationRole, cancellationToken As CancellationToken) As Task(Of String)
Overloads Function GetRoleIdAsync(role As ApplcationRole, cancellationToken As CancellationToken) As Task(Of String)
Overloads Function GetRoleNameAsync(role As ApplcationRole, cancellationToken As CancellationToken) As Task(Of String)
Overloads Function SetNormalizedRoleNameAsync(role As ApplcationRole, normalizedName As String, cancellationToken As CancellationToken) As Task
Overloads Function SetRoleNameAsync(role As ApplcationRole, roleName As String, cancellationToken As CancellationToken) As Task
Overloads Function UpdateAsync(role As ApplcationRole, cancellationToken As CancellationToken) As Task(Of IdentityResult)
End Interface
和
Public Interface ICustomUserStore
Inherits IUserStore(Of ApplicationUser)
Overloads Sub Dispose()
Overloads Function CreateAsync(user As ApplicationUser, cancellationToken As CancellationToken) As Task(Of IdentityResult)
Overloads Function DeleteAsync(user As ApplicationUser, cancellationToken As CancellationToken) As Task(Of IdentityResult)
Overloads Function FindByIdAsync(userId As String, cancellationToken As CancellationToken) As Task(Of ApplicationUser)
Overloads Function FindByNameAsync(normalizedUserName As String, cancellationToken As CancellationToken) As Task(Of ApplicationUser)
Overloads Function GetNormalizedUserNameAsync(user As ApplicationUser, cancellationToken As CancellationToken) As Task(Of String)
Overloads Function GetUserIdAsync(user As ApplicationUser, cancellationToken As CancellationToken) As Task(Of String)
Overloads Function GetUserNameAsync(user As ApplicationUser, cancellationToken As CancellationToken) As Task(Of String)
Overloads Function SetNormalizedUserNameAsync(user As ApplicationUser, normalizedName As String, cancellationToken As CancellationToken) As Task
Overloads Function SetUserNameAsync(user As ApplicationUser, userName As String, cancellationToken As CancellationToken) As Task
Overloads Function UpdateAsync(user As ApplicationUser, cancellationToken As CancellationToken) As Task(Of IdentityResult)
End Interface
然后我用相同的方法添加身份
Builder.Services.AddIdentity(Of ApplicationUser, ApplcationRole).AddUserStore(Of CustomUserStore).AddRoleStore(Of CustomRoleStore)()
它看起来足以配置MS身份,但出乎意料的是,我收到了
InvalidOperationException:没有类型的服务"微软。AspNetCore。身份UserManager `1[Microsoft.AspNetCore.Identity.IdentityUser]'已注册。
我还尝试使用各种选项,如
Builder.Services.ConfigureApplicationCookie(Sub(options)
options.LoginPath = "/User/Login"
End Sub)
和
Builder.Services.Configure(Of IdentityOptions)(Sub(options)
'Password settings.
options.Password.RequireDigit = True
options.Password.RequireLowercase = True
options.Password.RequireNonAlphanumeric = True
options.Password.RequireUppercase = True
options.Password.RequiredLength = 6
options.Password.RequiredUniqueChars = 1
End Sub)
和其他选择,但我总是失败。我失去了什么?什么错误?
经过研究,我发现了这个问题的原因。
要查看的标准注射是
@using Microsoft.AspNetCore.Identity
@inject SignInManager<IdentityUser> SignInManager
@inject UserManager<IdentityUser> UserManager
但因为我为ApplicationUser配置了服务,所以我必须以相同的方式创建这个注入
@using MyBackendApi.Models
@inject SignInManager<ApplicationUser> SignInManager
@inject UserManager<ApplicationUser> UserManager