我已按照http://www.asp.net/identity/overview/extensibility/change-primary-key-for-users-in-aspnet-identity中的说明更改了PK,但是在我尝试登录后,我收到以下错误。登录部分成功,因为"这个"包含所有合法数据,但创建标识似乎失败
来自物化' System.String'的指定演员表。输入' System.Int32'类型无效。
在
行var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
方法
public class ApplicationUser : IdentityUser<int, CustomUserLogin, CustomUserRole, CustomUserClaim>
{
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser, int> 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;
}
public string FirstName { get; set; }
public string LastName { get; set; }
}
答案 0 :(得分:4)
我也有同样的问题..唯一的区别是我的错误发生在AddToRole
或AddToRoleAsync
期间。
来自物化&#39; System.String&#39;的指定演员表。输入&#39; System.Int32&#39;类型无效。
违规行位于:await UserManager.AddToRoleAsync(user.Id, model.RoleId);
事实证明,我需要更改表AspNetRoles
的密钥......也许这张图片更清晰......
答案 1 :(得分:3)
清除您的Cookie。您可能在更改PK之前运行了应用程序,现在尝试使用cookie中的其他“密钥类型”登录。
答案 2 :(得分:0)
根据您的来源,我假设您正在使用ApplicationUserManager来管理所有配置。使用ApplicationUserManager而不是UserManager,如下所示。在owin startUp中使用GenerateUserIdentityAsync方法的原因。
使用ApplicationUserManager而不是UserManager。
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(ApplicationUserManager 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;
}
希望这有帮助。