I’m brand new to .net Identity Core and I’m trying to get a working example project going.
I had a previous project that used .net Entity Core and the project was working with a controller and a postgres database for basic CRUD operations.
I wanted to add Identity Core though so I started following the tutorial on Learn Microsoft.
Apparently Identity Core is supposed to generate some endpoints automatically for me but when I view my Swagger API page only my endpoints I created on my Controller are showing up.
<code>using System.Text.Json.Serialization;
using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
using ShopBack.Database.Repositories;
var builder = WebApplication.CreateBuilder(args);
.AddScoped<IProductRepository, ProductRepository>()
.AddScoped<ICategoryRepository, CategoryRepository>()
.AddScoped<ProductsService>()
.AddScoped<CategoryService>()
.AddScoped<LibraryContext>()
.AddScoped<IShopUnitOfWork, ShopUnitOfWork>()
.AddScoped<IUnitOfWork, UnitOfWork>()
.AddControllers(options => options.SuppressAsyncSuffixInActionNames = false)
.AddJsonOptions(options => options.JsonSerializerOptions.ReferenceHandler = ReferenceHandler.IgnoreCycles);
//https://gavilan.blog/2021/05/19/fixing-the-error-a-possible-object-cycle-was-detected-in-different-versions-of-asp-net-core/
builder.Services.AddDbContext<LibraryContext>(options =>
options.UseNpgsql(builder.Configuration.GetConnectionString("YourConnectionName"));
builder.Services.AddDbContext<ApplicationDbContext>(
options => options.UseInMemoryDatabase("AppDb"));
builder.Services.AddAuthorization();
.AddIdentityApiEndpoints<IdentityUser>()
.AddEntityFrameworkStores<ApplicationDbContext>();
builder.Services.AddSwaggerGen();
var app = builder.Build();
//configure request pipeline
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
app.MapIdentityApi<IdentityUser>();
<code>using System.Text.Json.Serialization;
using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
using ShopBack.Database;
using ShopBack.Database.Repositories;
using ShopBack.Services;
var builder = WebApplication.CreateBuilder(args);
{
builder.Services
.AddScoped<IProductRepository, ProductRepository>()
.AddScoped<ICategoryRepository, CategoryRepository>()
.AddScoped<ProductsService>()
.AddScoped<CategoryService>()
.AddScoped<LibraryContext>()
.AddScoped<IShopUnitOfWork, ShopUnitOfWork>()
.AddScoped<IUnitOfWork, UnitOfWork>()
.AddControllers(options => options.SuppressAsyncSuffixInActionNames = false)
.AddJsonOptions(options => options.JsonSerializerOptions.ReferenceHandler = ReferenceHandler.IgnoreCycles);
//https://gavilan.blog/2021/05/19/fixing-the-error-a-possible-object-cycle-was-detected-in-different-versions-of-asp-net-core/
builder.Services.AddDbContext<LibraryContext>(options =>
{
options.UseNpgsql(builder.Configuration.GetConnectionString("YourConnectionName"));
});
builder.Services.AddDbContext<ApplicationDbContext>(
options => options.UseInMemoryDatabase("AppDb"));
builder.Services.AddAuthorization();
builder.Services
.AddIdentityApiEndpoints<IdentityUser>()
.AddEntityFrameworkStores<ApplicationDbContext>();
builder.Services.AddSwaggerGen();
}
var app = builder.Build();
{
//configure request pipeline
app.MapControllers();
app.UseCors (x => x
.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader()
);
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.MapIdentityApi<IdentityUser>();
}
app.Run();
</code>
using System.Text.Json.Serialization;
using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
using ShopBack.Database;
using ShopBack.Database.Repositories;
using ShopBack.Services;
var builder = WebApplication.CreateBuilder(args);
{
builder.Services
.AddScoped<IProductRepository, ProductRepository>()
.AddScoped<ICategoryRepository, CategoryRepository>()
.AddScoped<ProductsService>()
.AddScoped<CategoryService>()
.AddScoped<LibraryContext>()
.AddScoped<IShopUnitOfWork, ShopUnitOfWork>()
.AddScoped<IUnitOfWork, UnitOfWork>()
.AddControllers(options => options.SuppressAsyncSuffixInActionNames = false)
.AddJsonOptions(options => options.JsonSerializerOptions.ReferenceHandler = ReferenceHandler.IgnoreCycles);
//https://gavilan.blog/2021/05/19/fixing-the-error-a-possible-object-cycle-was-detected-in-different-versions-of-asp-net-core/
builder.Services.AddDbContext<LibraryContext>(options =>
{
options.UseNpgsql(builder.Configuration.GetConnectionString("YourConnectionName"));
});
builder.Services.AddDbContext<ApplicationDbContext>(
options => options.UseInMemoryDatabase("AppDb"));
builder.Services.AddAuthorization();
builder.Services
.AddIdentityApiEndpoints<IdentityUser>()
.AddEntityFrameworkStores<ApplicationDbContext>();
builder.Services.AddSwaggerGen();
}
var app = builder.Build();
{
//configure request pipeline
app.MapControllers();
app.UseCors (x => x
.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader()
);
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.MapIdentityApi<IdentityUser>();
}
app.Run();
The tutorial had me create this DB context class for Identity:
<code>using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
namespace ShopBack.Database;
public class ApplicationDbContext : IdentityDbContext<IdentityUser>
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options){ }
<code>using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
namespace ShopBack.Database;
public class ApplicationDbContext : IdentityDbContext<IdentityUser>
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options){ }
}
</code>
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
namespace ShopBack.Database;
public class ApplicationDbContext : IdentityDbContext<IdentityUser>
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options){ }
}
In my Program.cs file (as shown above), I’m adding:
.AddIdentityApiEndpoints<IdentityUser>()
.AddEntityFrameworkStores<ApplicationDbContext>();
<code>builder.Services
.AddIdentityApiEndpoints<IdentityUser>()
.AddEntityFrameworkStores<ApplicationDbContext>();
</code>
builder.Services
.AddIdentityApiEndpoints<IdentityUser>()
.AddEntityFrameworkStores<ApplicationDbContext>();
and
<code>app.MapIdentityApi<IdentityUser>();
<code>app.MapIdentityApi<IdentityUser>();
</code>
app.MapIdentityApi<IdentityUser>();
Which I thought would create my endpoints for me but they don’t show up in Swagger for me:
I put an [Authorize] annotation on my /products API endpoint and try to make the call and it tells me I’m not authorized when before I would just get a list of products back so I know Identity is partially working.
Can anyone point out what I am doing wrong?