【发布时间】:2018-08-22 04:58:13
【问题描述】:
我正在尝试使用 ASP.NET Identity Core 添加自定义配置文件详细信息。我已尝试将IdentityUser 类扩展如下:
public class ApplicationUser : IdentityUser
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
}
这是我继承 IdentityDbContext 的 ApplicationDbContext:
public class ApplicationIdentityDbContext : IdentityDbContext
{
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer("Data Source=.;Initial Catalog=TokenDatabase;Trusted_Connection=True;");
}
}
这是我的startup.cs 文件:
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
// ===== Add our DbContext ========
services.AddDbContext<ApplicationIdentityDbContext>();
// ===== Add Identity ========
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationIdentityDbContext>()
.AddDefaultTokenProviders();
// ===== Add Jwt Authentication ========
JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear(); // => remove default claims
services
.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(cfg =>
{
cfg.RequireHttpsMetadata = false;
cfg.SaveToken = true;
cfg.TokenValidationParameters = new TokenValidationParameters
{
ValidIssuer = Configuration["JwtIssuer"],
ValidAudience = Configuration["JwtIssuer"],
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["JwtKey"])),
ClockSkew = TimeSpan.Zero // remove delay of token when expire
};
});
services.AddSwaggerGen(x =>
{
x.SwaggerDoc("v1", new Info
{
Title = "ASP NET .Identity Core Example"
});
var xmlFilePath = System.AppDomain.CurrentDomain.BaseDirectory + @"WebApiJwt.xml";
x.IncludeXmlComments(xmlFilePath);
});
// ===== Add MVC ========
services.AddMvc();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(
IApplicationBuilder app,
IHostingEnvironment env,
ApplicationIdentityDbContext dbContext
)
{
// ===== Create tables ======
dbContext.Database.Migrate();
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseSwagger();
app.UseSwaggerUI(x =>
{
x.SwaggerEndpoint("/swagger/v1/swagger.json", "Core API");
});
// ===== Use Authentication ======
app.UseAuthentication();
app.UseMvc();
}
}
我在执行此操作时面临 2 个问题:
- 首先,当我尝试添加迁移时,我收到了错误
An error occurred while calling method 'BuildWebHost' on class 'Program'. Continuing without the application service provider. Error: There is already an object named 'AspNetRoles' in the database.
-
我无法使用自定义个人资料信息更新
AspNetUsers,我已尝试添加:// ===== Add Identity ======== services.AddIdentity<ApplicationUser, IdentityRole>() .AddEntityFrameworkStores<ApplicationIdentityDbContext>() .AddDefaultTokenProviders();也是
ApplicationUser类型,但AspNetUsers表不会更新那些额外的列。
【问题讨论】:
标签: c# asp.net-identity entity-framework-core