【发布时间】:2015-09-28 03:35:10
【问题描述】:
当我尝试登录我的开发站点时,我收到一个奇怪的错误:
列名“Email1”无效。
我为许多不同的 ASP.NET Identity 2.0 类创建了派生类,即:
public class MyUser : IdentityUser<int, MyLogin, MyUserRole, MyClaim>//, IUser<int>
{
#region properties
public string ActivationToken { get; set; }
public string PasswordAnswer { get; set; }
public string PasswordQuestion { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string TaxID { get; set; }
public bool IsActive { get; set; }
public bool IsApproved { get; set; }
#endregion
#region methods
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<MyUser, int> userManager)
{
var userIdentity = await userManager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
// Add custom user claims here
return userIdentity;
}
#endregion
}
违规代码在 AccountController 的 Login 方法中对 UserManager.FindAsync() 的调用中:
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
if (ModelState.IsValid)
{
var user = await UserManager.FindAsync(model.Email, model.Password);
if (user != null)
{
await SignInAsync(user, model.RememberMe);
return RedirectToLocal(returnUrl);
}
ModelState.AddModelError("", "Invalid username or password.");
}
// If we got this far, something failed, redisplay form
return View(model);
}
我已经这样设计了我的用户表:
CREATE TABLE [dbo].[User]
(
[ID] [int] IDENTITY(1,1) NOT NULL,
[Password] [nvarchar](50) NOT NULL,
[FirstName] [nvarchar](50) NULL,
[LastName] [nvarchar](50) NULL,
[Email] [nvarchar](50) NOT NULL,
[TaxID] [nvarchar](50) NULL,
[PaymentMethodID] [int] NULL,
[IsActive] [bit] NOT NULL DEFAULT 1,
[IsApproved] [bit] NOT NULL,
[IsLocked] [bit] NOT NULL,
[CreationDate] [datetime] NULL,
[ApprovalDate] [datetime] NULL DEFAULT NULL,
[LastLoginDate] [datetime] NULL,
[PasswordQuestion] [nvarchar](max) NULL,
[PasswordAnswer] [nvarchar](max) NULL,
[ActivationToken] [nvarchar](200) NULL,
[EmailConfirmed] [bit] NOT NULL,
[SecurityStamp] [nvarchar](max) NULL,
[PhoneNumber] [nvarchar](50) NULL,
[PhoneNumberConfirmed] [bit] NOT NULL,
[TwoFactorEnabled] [bit] NOT NULL,
[LockoutEndDateUtc] [datetime2](7) NULL,
[LockoutEnabled] [bit] NOT NULL,
[AccessFailedCount] [int] NOT NULL,
CONSTRAINT [User_PK] PRIMARY KEY NONCLUSTERED ([ID]),
CONSTRAINT [Email_UK] UNIQUE NONCLUSTERED([Email])
)
我正在 MyDbContext 的 OnModelCreating 方法中将 MyUser 类绑定到该表:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
// Map Entities to their tables.
modelBuilder.Entity<MyUser>().ToTable("User");
modelBuilder.Entity<MyRole>().ToTable("Role");
modelBuilder.Entity<MyClaim>().ToTable("UserClaim");
modelBuilder.Entity<MyLogin>().ToTable("UserLogin");
modelBuilder.Entity<MyUserRole>().ToTable("UserRole");
// Set AutoIncrement-Properties
modelBuilder.Entity<MyUser>().Property(r => r.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
modelBuilder.Entity<MyClaim>().Property(r => r.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
modelBuilder.Entity<MyRole>().Property(r => r.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
// Override some column mappings that do not match our default
modelBuilder.Entity<MyUser>().Property(r => r.UserName).HasColumnName("Email");
modelBuilder.Entity<MyUser>().Property(r => r.PasswordHash).HasColumnName("Password");
}
Somewhere Identity 2.0 正在创建另一个它不应该创建的电子邮件列。有什么想法吗?
【问题讨论】:
标签: asp.net-mvc asp.net-mvc-5 asp.net-identity-2