12

Visual Studio 2015 脚手架使用UserManager<TUser>不能用于创建ClaimsIdentity. 有没有人有一个关于如何做到这一点的工作示例?

VS2015 脚手架抛出错误:

public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
{
    // Note the authenticationType must match the one 
    // defined in CookieAuthenticationOptions.AuthenticationType
    var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);

    // Add custom user claims here
    return userIdentity;
}

注意:我添加了ApplicationUser不与IdentyUser.

4

2 回答 2

15

UserManager 在 MVC6 版本中发生了变化。您将需要修改您的代码...

public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager) {
    var authenticationType = "Put authentication type Here";
    var userIdentity = new ClaimsIdentity(await manager.GetClaimsAsync(this), authenticationType);

    // Add custom user claims here
    return userIdentity;
}
于 2016-04-10T17:56:23.110 回答
1

.net 核心

答案已经改变,根据herehere,两位作者都声明了使用UserClaimsPrincipalFactory<ApplicationUser>核心2.2的默认实现。第一篇文章说您正在寻找的方法已经移动。但是,如上所述,您必须UserClaimsPrincipalFactory像这样在服务中注册您的实现,下面是示例类实现。请注意,我们必须注册MyUserClaimsPrincipalFactory,以便我们的服务集合知道在哪里可以找到它。这意味着在SignInManager<ApplicationUser>它的构造函数中也指的是IUserClaimsPrincipalFactory<ApplicationUser>但服务会解决它:

services
.AddIdentity<ApplicationUser, ApplicationRole>()              
.AddClaimsPrincipalFactory<MyUserClaimsPrincipalFactory>() // <======== HERE

services.AddScoped<IUserClaimsPrincipalFactory<ApplicationUser>, MyUserClaimsPrincipalFactory>();

这是下面的课程:

public class MyUserClaimsPrincipalFactory : UserClaimsPrincipalFactory<ApplicationUser>
{
    public MyUserClaimsPrincipalFactory(UserManager<ApplicationUser> userManager, 
        IOptions<IdentityOptions> optionsAccessor)
        : base(userManager, optionsAccessor)
    {
    }

    protected override async Task<ClaimsIdentity> GenerateClaimsAsync(ApplicationUser user)
    {
        var identity = await base.GenerateClaimsAsync(user);
        identity.AddClaim(new Claim("ContactName", "John Smith"));
        return identity;
    }
}
于 2020-04-23T14:43:58.020 回答