在AspNet Identity框架中,ApplicationUserManager
是一个用于管理用户的类,而GeneratePasswordResetTokenAsync
方法是用于生成重置密码的令牌的异步方法。当在调用GeneratePasswordResetTokenAsync
方法时,出现了“无效的列UserId”的错误,通常是由于未正确配置用户表的主键列造成的。
解决此问题的方法如下所示:
确保数据库中的用户表具有正确的主键列。在大多数情况下,AspNet Identity默认要求用户表的主键列名为Id
,并且是字符串类型。
检查ApplicationUserManager
类的配置,确保已正确指定了用户表的主键列。在ApplicationUserManager
类的构造函数中,应该设置UserValidator
的AllowOnlyAlphanumericUserNames
属性为false
,以允许使用非字母数字的用户名。同时,应该设置UserValidator
的RequireUniqueEmail
属性为true
,以确保电子邮件地址是唯一的。
public class ApplicationUserManager : UserManager
{
public ApplicationUserManager(IUserStore store)
: base(store)
{
// 设置UserValidator的属性
this.UserValidator = new UserValidator(this)
{
AllowOnlyAlphanumericUserNames = false,
RequireUniqueEmail = true
};
}
}
如果你已经自定义了用户表的主键列名或类型,可以通过重写ApplicationUser
类来指定自定义的主键列名和类型。
public class ApplicationUser : IdentityUser
{
// 指定自定义的主键列名和类型
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public override string Id { get; set; }
}
确保在更改了用户表的主键列名或类型后,重新迁移数据库以应用更改。
以上是解决“ApplicationUserManager的GeneratePasswordResetTokenAsync方法中出现了无效的列UserId”的方法。
上一篇:ApplicationUser和另一个对象之间的一对多关系
下一篇:ApplicationUserService的构造函数的第4个参数需要一个类型为‘ConfirmationToken’的bean,但是找不到。